Android学习之网络通信2

本文介绍了在Android开发中进行网络通信时的权限配置,包括在AndroidManifest.xml中添加访问网络权限以解决运行时错误,以及在MainActivity.java中创建网络请求的监听器。在Android 6.0及以上版本,需要在运行时动态获取权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从web服务器的json文件中读取数据

AndroidManifest.xml

访问网络权限

<uses-permission android:name="android.permission.INTERNET" />

在使用android-json-rpc的时候报java.lang.NoClassDefFoundError:failed resolution of :Lorg/apache/http/ProtocolVersion错误
application标签里面加入

<uses-library android:name="org.apache.http.legacy" android:required="false" />

访问http时崩溃,因为Android9.0 默认是禁止所有的http的,所以在application标签属性里面加入

android:usesCleartextTraffic="true"
声明是否允许未加密的网络流量,默认为false。

MainActivity.java

手动写一个StringRequest子类

new StringRequest(
    	url,  //第一个参数,web服务器的ip地址
    	Response.Listener<String> resListener,  //第二个参数,volley的监听器
    	Response.ErrorListener resErrorListener //第三个参数,响应失败
    ){    //将默认的iso-8859-1格式转换为utf-8
      @Override
      protected Response<String> parseNetworkResponse(NetworkResponse response) {
            try {
                            String jsonString = new String(response.data, "UTF-8");
                            return Response.success(jsonString,
                                    HttpHeaderParser.parseCacheHeaders(response));
            } catch (UnsupportedEncodingException e) {
                            return Response.error(new ParseError(e));
            } catch (Exception je) {
                 return Response.error(new ParseError(je));
            }
       }
 } ;

监听器

class mClick implements View.OnClickListener
    {
        String str;
        @Override
        public void onClick(View v) {
            if(v == volleyBtn){
                RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this);
                StringRequest stringRequest = new StringRequest(
                        //第一个参数,web服务器的ip地址
                        "http://203.195.219.146:8080/android_ch7_ex2/test/jsonData.json",
//                        第二个参数,volley的监听器
                        new Response.Listener<String>() {  //volley的监听器,

                            @Override
                            public void onResponse(String response)
                            {  txt.setText(response); }// onResponse()方法获取接收到的数据值
                        },
//                        第三个参数,响应失败
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error)
                            {  Log.e("TAG", error.getMessage(), error); }
                        }) {    //将默认的iso-8859-1格式转换为utf-8
                    @Override
                    protected Response<String> parseNetworkResponse(NetworkResponse response) {
                        try {
                            String jsonString = new String(response.data, "UTF-8");
                            return Response.success(jsonString,
                                    HttpHeaderParser.parseCacheHeaders(response));
                        } catch (UnsupportedEncodingException e) {
                            return Response.error(new ParseError(e));
                        } catch (Exception je) {
                            return Response.error(new ParseError(je));
                        }
                    }
                } ;
                mQueue.add(stringRequest);
            } // if_end
        }   //onClick()_end
    }  //class  mClick_end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值