http请求 网络请求 从网路读数据

读取网络数据

URL httpUrl = new URL(jsonUrl);//创建url http地址

HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();//打开http 链接

InputStream in = conn.getInputStream();//得到输入流//这个一句从阻塞单线线程。

android里读取网路数据必须在子线程里

httpRead(url,callback){

   Handler handler=new Handler();//倒主线程使用

    new Thread(){

          public void run(){

                  URL httpUrl = new URL(jsonUrl);//创建url http地址

                  HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();//打开http 链接

                  InputStream in = conn.getInputStream();//得到输入流//这个一句从阻塞单线线程。

----------------------------------------------------------------------------------

                  网络返回成功时:

                  String str=从in从读数据;

                  //当前的子线程中执行callback的onSucces

                  callback.onSucces(str);

                 //用handler倒到主线程中执行onSucces

                  handler.post(new Runnable(){

                         callback.onSucces(str);

                  });

-----------------------------------------------------------------------------------------------------------

                  网络返回失败时:

                  //当前的子线程中执行callback的onError

                  callback.onError();

                  /用handler倒到主线程中执行onError

                   handler.post(new Runnable(){

                         callback.onSucces(str);/

                  });

          }

    }

}

第三方库已经封装上面的开辟线程和倒主线程的逻辑,只需传url与callback,注意callback已经别倒到住线程了。

例如:第三方网络库android-async-http:

asyncHttpClient=new AsyncHttpClient();//整个项目工程只需要一个。

asyncHttpClient.get(jsonUrl, new TextHttpResponseHandler() {

            @Override
            public void onSuccess(int statusCode, Header[] headers, String responseString) {

                      //主线程执行,responseString是网络返回的结果

            }

            @Override
            public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
                      //主线程执行网络出错
            }

}

例如:第三方网络库Volley:

RequestQueue requestQueue= Volley.newRequestQueue(context);

StringRequest request = new StringRequest(Request.Method.GET,

      url,

      new Response.Listener<String>() {

            public void onResponse(String s) {

                    //主线程执行,s是网络返回的结果

            }

        },

        new Response.ErrorListener() {

            @Override

            public void onErrorResponse(VolleyError volleyError) {

                    //主线程执行网络出错

            }

        });

requestQueue.add(request);

//request可以设置超时时间

request.setRetryPolicy(new DefaultRetryPolicy(

                60000, //timeout时间

                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,//重连次数

                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

注意5.0以上需要在主模块build.gradle加

android {

    useLibrary 'org.apache.http.legacy'//必须在第一行

}

相关推荐