AsyncHttpClient httpURLCon httpClient AsyncTask 访问服务器

Activity



/**

 * 测试使用三种方式(AsyncHttpClient、httpURLCon、httpClient)分别以get和post方式访问服务器

 * @author 白乾涛

 */

public class HttpComActivity extends ListActivity {

    private TextView tv_result;

    private ImageView imageView;

    private String session_id;//每次登录都不一样

    private int uid;//10415362

    private String picUrl;//每次登录都不一样

    /**拼接的URL地址*/

    private static String URL_HEAD = "http://" + AsyncXiuHttpHelper.SERVER_URL;

    public static final int GET_ASYNC_HTTP = 0;

    public static final int POST_ASYNC_HTTP = 1;

    public static final int GET_HTTP_URL_CON = 2;

    public static final int POST_HTTP_URL_CON = 3;

    public static final int GET_HTTP_CLIENT = 4;

    public static final int POST_HTTP_CLIENT = 5;

    public static final int LOAD_PIC_BY_HANDLER = 6;

    public static final int LOAD_PIC_BY_ASYNCTASK = 7;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        String[] array = { "使用AsyncHttpClient的get方式", "使用AsyncHttpClient的post方式", //

                "使用httpURLCon的get方式", "使用httpURLCon的post方式", //

                "使用httpClient的get方式", "使用httpClient的post方式",//

                "使用httpURLCon+handler加载图片", "使用httpURLCon+AsyncTask加载图片" };

        for (int i = 0; i < array.length; i++) {

            array[i] = i + "、" + array[i];

        }

        imageView = new ImageView(this);

        getListView().addFooterView(imageView);

        tv_result = new TextView(this);// 将内容显示在TextView中

        tv_result.setTextColor(Color.BLUE);

        tv_result.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);

        tv_result.setPadding(20, 10, 20, 10);

        getListView().addFooterView(tv_result);

        setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>(Arrays.asList(array))));

        //初始化

        if (MyApplication.getApplication().getUser() != null) {

            session_id = MyApplication.getApplication().getUser().getuSessionId();//设置完后就可以获取了

            uid = MyApplication.getApplication().getUser().getuId();

            tv_result.setText("session_id=" + session_id + "\n" + "uid=" + uid);

        } else tv_result.setText("请先登录再操作");

    }

    @Override

    protected void onListItemClick(ListView l, View v, int position, long id) {

        picUrl = UrlOfPics.urls[new Random().nextInt(UrlOfPics.urls.length)];

        switch (position) {

        case GET_ASYNC_HTTP:

            asyncGetNotifaction();

            break;

        case POST_ASYNC_HTTP:

            asyncModifySignature();

            break;

        case GET_HTTP_URL_CON:

            httpURLConGet();

            break;

        case POST_HTTP_URL_CON:

            httpURLConPost();

            break;

        case GET_HTTP_CLIENT:

            httpClientGet();

            break;

        case POST_HTTP_CLIENT:

            httpClientPost();

            break;

        case LOAD_PIC_BY_HANDLER:

            loadPicByHandler();

            break;

        case LOAD_PIC_BY_ASYNCTASK:

            new MyImageLoadTask().execute(picUrl);

            break;

        }

    }

    //**************************************************************************************************************************

    //                                                                         使用异步框架AsyncHttpClient访问服务器

    //**************************************************************************************************************************

    /**

     * 获取活动通知数据,get

     */

    private void asyncGetNotifaction() {

        RequestParams params = new RequestParams();

        params.put("session_id", session_id);

        params.put("uid", uid);

        ProgressDialogUtil.showProgressDialog(HttpComActivity.this, "", "申请中...");

        AsyncXiuHttpHelper.get(UrlOfServer.RQ_NOTIFICATION, params, new OnHttpListener<JSONObject>() {

            @Override

            public void onHttpListener(boolean httpSuccessed, final JSONObject obj) {//运行UI线程中

                ProgressDialogUtil.dismissProgressDialog();

                tv_result.setText(JsonFormatTool.formatJson(obj.toString()));

                new Thread() {//子线程中请求网络

                    @Override

                    public void run() {

                        //final String img = obj.getJSONArray("news").getJSONObject(0).getString("img");

                        InputStream stream = HttpUrlClientUtils.getInputStreamFromUrl(picUrl);//这里使用另一张图片演示

                        final Bitmap bitmap = BitmapFactory.decodeStream(stream);

                        runOnUiThread(new Runnable() {//主线程总更新UI。如果数据比较复杂,应该用handler处理

                            @Override

                            public void run() {

                                imageView.setImageBitmap(bitmap);

                            }

                        });

                    }

                }.start();

            }

        });

    }

    /**

     * 提交用户个性签名,post

     */

    private void asyncModifySignature() {

        RequestParams params = new RequestParams();

        params.put("session_id", session_id);

        params.put("uid", uid);

        params.put("sig_data", "签名内容:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date()));

        ProgressDialogUtil.showProgressDialog(HttpComActivity.this, "", "申请中...");

        AsyncXiuHttpHelper.post(UrlOfServer.RQ_USER_SIGNATURE, params, new OnHttpListener<JSONObject>() {

            @Override

            public void onHttpListener(boolean httpSuccessed, JSONObject obj) {

                ProgressDialogUtil.dismissProgressDialog();

                tv_result.setText(JsonFormatTool.formatJson(obj.toString()));

                imageView.setImageResource(R.drawable.ic_launcher);

            }

        });

    }

    //**************************************************************************************************************************

    //                                                                             使用HttpURLConnection访问服务器

    //**************************************************************************************************************************

    /**

     * 使用java.net.HttpURLConnection类的【GET】的方式,获取活动通知数据

     */

    private void httpURLConGet() {

        ProgressDialogUtil.showProgressDialog(HttpComActivity.this, "", "申请中...");

        new Thread(new Runnable() {//子线程中请求网络

                    @Override

                    public void run() {

                        String parameters = "session_id=" + session_id + "&uid=" + uid;//请求参数

                        final String strJson = HttpUrlClientUtils.httpURLConGet(URL_HEAD + UrlOfServer.RQ_NOTIFICATION, parameters);

                        //final String img = new JSONObject(strJson).getJSONArray("news").getJSONObject(0).getString("img");

                        InputStream stream = HttpUrlClientUtils.getInputStreamFromUrl(picUrl);//这里使用另一张图片演示

                        final Bitmap bitmap = BitmapFactory.decodeStream(stream);

                        runOnUiThread(new Runnable() {//主线程中更新UI

                            @Override

                            public void run() {

                                ProgressDialogUtil.dismissProgressDialog();

                                tv_result.setText(JsonFormatTool.formatJson(strJson));

                                imageView.setImageBitmap(bitmap);

                            }

                        });

                    }

                }).start();

    }

    /**

     * 使用java.net.HttpURLConnection类的【POST】的方式,提交用户个性签名

     */

    private void httpURLConPost() {

        ProgressDialogUtil.showProgressDialog(HttpComActivity.this, "", "申请中...");

        new Thread(new Runnable() {

            @Override

            public void run() {

                String sig_data = "签名内容:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date());

                String requestBody = "session_id=" + session_id + "&uid=" + uid + "&sig_data=" + sig_data;//请求体中的数据即为get请求URL路径?后面的内容

                final String str = HttpUrlClientUtils.httpURLConPost(URL_HEAD + UrlOfServer.RQ_USER_SIGNATURE, requestBody);

                runOnUiThread(new Runnable() {

                    @Override

                    public void run() {

                        ProgressDialogUtil.dismissProgressDialog();

                        imageView.setImageResource(R.drawable.ic_launcher);

                        try {

                            tv_result.setText(JsonFormatTool.formatJson(new JSONObject(str).toString()));

                        } catch (JSONException e) {

                            e.printStackTrace();

                        }

                    }

                });

            }

        }).start();

    }

    //**************************************************************************************************************************

    //                                                                                      使用HttpClient访问服务器

    //**************************************************************************************************************************

    /**

     * 使用org.apache.http.client.HttpClient的【Get】的方式登录

     */

    private void httpClientGet() {

        ProgressDialogUtil.showProgressDialog(HttpComActivity.this, "", "申请中...");

        new Thread(new Runnable() {

            @Override

            public void run() {

                String parameters = "session_id=" + session_id + "&uid=" + uid;//请求参数

                final String strJson = HttpUrlClientUtils.httpClientGet(URL_HEAD + UrlOfServer.RQ_NOTIFICATION, parameters);

                //final String img = new JSONObject(strJson).getJSONArray("news").getJSONObject(0).getString("img");

                InputStream stream = HttpUrlClientUtils.getInputStreamFromUrl(picUrl);//这里使用另一张图片演示

                final Bitmap bitmap = BitmapFactory.decodeStream(stream);

                runOnUiThread(new Runnable() {//主线程中更新UI

                    @Override

                    public void run() {

                        ProgressDialogUtil.dismissProgressDialog();

                        tv_result.setText(JsonFormatTool.formatJson(strJson));

                        imageView.setImageBitmap(bitmap);

                    }

                });

            }

        }).start();

    }

    /**

     * 使用org.apache.http.client.HttpClient的【Post】的方式登录

     */

    private void httpClientPost() {

        ProgressDialogUtil.showProgressDialog(HttpComActivity.this, "", "申请中...");

        new Thread(new Runnable() {

            @Override

            public void run() {

                String sig_data = "签名内容:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date());

                // 设置post请求的参数,代表发送给服务器的实体中的内容

                List<NameValuePair> parameters = new ArrayList<NameValuePair>();

                parameters.add(new BasicNameValuePair("session_id", session_id));

                parameters.add(new BasicNameValuePair("uid", uid + ""));

                parameters.add(new BasicNameValuePair("sig_data", sig_data));

                //参数的类型为【HttpEntity】接口,其实现类UrlEncodedFormEntity中的元素为键值对形式的【BasicNameValuePair】对象

                final String str = HttpUrlClientUtils.httpClientPost(URL_HEAD + UrlOfServer.RQ_USER_SIGNATURE, parameters);

                runOnUiThread(new Runnable() {

                    @Override

                    public void run() {

                        ProgressDialogUtil.dismissProgressDialog();

                        imageView.setImageResource(R.drawable.ic_launcher);

                        try {

                            tv_result.setText(JsonFormatTool.formatJson(new JSONObject(str).toString()));

                        } catch (JSONException e) {

                            e.printStackTrace();

                        }

                    }

                });

            }

        }).start();

    }

    public static final int MSG_WHAT_BITMAP = 1;

    @SuppressLint("HandlerLeak")

    private Handler mHandler = new Handler() {

        @Override

        public void handleMessage(Message msg) {

            switch (msg.what) {

            case MSG_WHAT_BITMAP:

                imageView.setImageBitmap((Bitmap) (msg.obj));

                break;

            }

        }

    };

    private void loadPicByHandler() {

        new Thread(new Runnable() {

            @Override

            public void run() {

                InputStream inputStream = HttpUrlClientUtils.getInputStreamFromUrl(picUrl);

                Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

                mHandler.sendMessage(Message.obtain(mHandler, MSG_WHAT_BITMAP, bitmap));

            }

        }).start();

    }

    class MyImageLoadTask extends AsyncTask<String, Bitmap, Bitmap> {

        protected Bitmap doInBackground(String... params) {

            InputStream inputStream = HttpUrlClientUtils.getInputStreamFromUrl(params[0]);

            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

            return bitmap;

        }

        @Override

        protected void onPostExecute(Bitmap result) {

            super.onPostExecute(result);

            imageView.setImageBitmap(result);

        }

    }

}

http访问服务器工具类


/** 

 * HttpURLConnection和HttpClient工具类

 * HttpURLConnection是java.net中的类,属于标准的java接口,在4.4版本的源码中被OkHttp替换掉了;HttpClient则是Apache提供的,已经被Google弃用了。

 * 一般我们实际开发中都是使用别人封装好的第三方网络请求框架,诸如:Volley,android-async-http,loopj等。

 * */

public class HttpUrlClientUtils {

    //*********************************************************************************************************************************************

    //                                                                                                                 HttpURLConnection

    //*********************************************************************************************************************************************

    /** 使用java.net.HttpURLConnection类的【GET】的方式登录     */

    public static String httpURLConGet(String strUrl, String parameters) {

        HttpURLConnection httpURLConnection = null;

        try {

            URL url = new URL(strUrl + "?" + parameters);//"?"后面的内容都属于请求头中的内容,服务器获取到请求信息后通过"&"分离出数据

            httpURLConnection = (HttpURLConnection) url.openConnection();//打开指定URL的连接

            httpURLConnection.setRequestMethod("GET"); // get或者post必须大写

            httpURLConnection.setConnectTimeout(3000); // 连接的超时时间,非必须

            httpURLConnection.setReadTimeout(3000); // 读数据的超时时间,非必须

            httpURLConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)");//非必须

            int responseCode = httpURLConnection.getResponseCode();//获取响应码

            if (responseCode == 200) {

                InputStream is = httpURLConnection.getInputStream();

                String result = getStringFromInputStream(is);

                return result;

            } else return "失败";

        } catch (MalformedURLException e) {

            e.printStackTrace();

            return "MalformedURLException";

        } catch (ProtocolException e) {

            e.printStackTrace();

            return "ProtocolException";

        } catch (IOException e) {

            e.printStackTrace();

            return "IOException";

        } finally {

            if (httpURLConnection != null) httpURLConnection.disconnect(); // 关闭连接

        }

    }

    /** 使用java.net.HttpURLConnection类的【POST】的方式登录     */

    public static String httpURLConPost(String strUrl, String requestBody) {

        HttpURLConnection httpURLConnection = null;

        try {

            URL url = new URL(strUrl);//区别1,URL不同,POST仅包含路径,不包含?后面的内容

            httpURLConnection = (HttpURLConnection) url.openConnection();

            httpURLConnection.setRequestMethod("POST");

            httpURLConnection.setDoInput(true);

            httpURLConnection.setDoOutput(true); // 必须设置此方法,默认情况下, 系统不允许向服务器输出内容

            httpURLConnection.setConnectTimeout(3000); // 连接的超时时间,非必须

            httpURLConnection.setReadTimeout(3000); // 读数据的超时时间,非必须

            httpURLConnection.setUseCaches(false);//Post方式不能缓存,非必须

            // 添加请求头,非必须

            httpURLConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)");//浏览器

            httpURLConnection.setRequestProperty("Accept-Charset", "utf-8");//编码

            httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//数据类型

            //    httpURLConnection.setRequestProperty("Content-Length", requestBody.length() + "");//不知道为什么,设置此属性后会报ProtocolException!

            OutputStream out = httpURLConnection.getOutputStream();// 获得一个输出流, 用于向服务器写数据

            out.write(requestBody.getBytes());//采用的是平台默认的字符集编码UTF-8,请求体中的数据即为get请求URL路径?后面的内容    

            out.close();

            int responseCode = httpURLConnection.getResponseCode();

            if (responseCode == 200) {

                InputStream is = httpURLConnection.getInputStream();

                String state = getStringFromInputStream(is);

                return state;

            } else return "失败";

        } catch (MalformedURLException e) {

            e.printStackTrace();

            return "MalformedURLException";

        } catch (ProtocolException e) {

            e.printStackTrace();

            return "ProtocolException";

        } catch (IOException e) {

            e.printStackTrace();

            return "IOException";

        } finally {

            if (httpURLConnection != null) httpURLConnection.disconnect();

        }

    }

    //*********************************************************************************************************************************************

    //                                                                                                                 HttpClient

    //*********************************************************************************************************************************************

    /** 使用org.apache.http.client.HttpClient的【Get】的方式登录     */

    public static String httpClientGet(String strUrl, String parameters) {

        HttpClient httpClient = null;

        try {

            httpClient = new DefaultHttpClient();

            HttpGet httpGet = new HttpGet(strUrl + "?" + parameters);

            HttpResponse response = httpClient.execute(httpGet); //HttpResponse对象中包含了服务器响应的全部信息

            int statusCode = response.getStatusLine().getStatusCode();// 获得服务器响应中的【响应行中的响应码】

            if (statusCode == 200) {

                HttpEntity entity = response.getEntity();

                InputStream is = entity.getContent();//获取实体内容

                String text = getStringFromInputStream(is);

                return text;

            } else return "失败";

        } catch (IllegalStateException e) {

            e.printStackTrace();

            return "IllegalStateException";

        } catch (IOException e) {

            e.printStackTrace();

            return "IOException";

        } finally {

            if (httpClient != null) httpClient.getConnectionManager().shutdown(); // 关闭连接, 释放资源

        }

    }

    /** 使用org.apache.http.client.HttpClient的【Post】的方式登录     */

    public static String httpClientPost(String strUrl, List<NameValuePair> parameters) {

        HttpClient httpClient = null;

        try {

            httpClient = new DefaultHttpClient();

            HttpPost httpPost = new HttpPost(strUrl);

            HttpEntity entity = new UrlEncodedFormEntity(parameters, "utf-8");

            httpPost.setEntity(entity);//设置实体内容

            HttpResponse response = httpClient.execute(httpPost);

            int statusCode = response.getStatusLine().getStatusCode();

            if (statusCode == 200) {

                InputStream is = response.getEntity().getContent();

                String text = getStringFromInputStream(is);

                return text;

            } else return "失败";

        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();

            return "UnsupportedEncodingException";

        } catch (ClientProtocolException e) {

            e.printStackTrace();

            return "ClientProtocolException";

        } catch (IllegalStateException e) {

            e.printStackTrace();

            return "IllegalStateException";

        } catch (IOException e) {

            e.printStackTrace();

            return "IOException";

        } finally {

            if (httpClient != null) httpClient.getConnectionManager().shutdown(); // 关闭连接和释放资源

        }

    }

    //*********************************************************************************************************************************************

    //                                                                                                                  其他方法

    //*********************************************************************************************************************************************

    /**从流中读取数据,返回字节数组*/

    public static byte[] getBytesFromInputStream(InputStream is) {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();// 字节数组输出流(内存输出流):可以捕获内存缓冲区的数据,转换成字节数组

        byte[] buffer = new byte[1024];

        int len = -1;

        try {

            while ((len = is.read(buffer)) != -1) {

                baos.write(buffer, 0, len);

            }

            is.close();

            return baos.toByteArray();

        } catch (IOException e) {

            e.printStackTrace();

            return null;

        } finally {

            if (baos != null) {

                try {

                    baos.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

    /**  将输入流转换成字符串信息 */

    public static String getStringFromInputStream(InputStream is) {

        byte[] bytes = getBytesFromInputStream(is);

        String temp = new String(bytes);//默认为UTF8编码

        if (temp.contains("utf-8")) return temp;

        else if (temp.contains("gb2312") || temp.contains("gbk")) {

            try {

                return new String(bytes, "gbk");

            } catch (UnsupportedEncodingException e) {

                e.printStackTrace();

            }

        }

        return temp;

    }

    /** 打开指定URL的URLConnection对象,获取一个InputStream */

    public static InputStream getInputStreamFromUrl(String url) {

        try {

            URLConnection conn = new URL(url).openConnection();

            conn.setConnectTimeout(3 * 1000);

            conn.setReadTimeout(3 * 1000);

            return conn.getInputStream();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return null;

    }

}

AsyncHttp封装


/**AsyncHttp访问网络的工具类*/

public class AsyncHttpHelper {

    public static final int HTTP_OK = 200;

    public static final String HTTP_ERROR = "系统繁忙,请稍后再试";

    //**************************************************************************************************************************

    //                                                                                                       最核心的两个方法

    //**************************************************************************************************************************

    /**

     * get 请求

     */

    public static void get(final String serverName, final String relativeUrl, RequestParams params, final OnHttpListener<JSONObject> onHttpListner) {

        if (params == null) params = new RequestParams();

        AsyncHttpClient asyncHttpClient = new com.loopj.android.http.AsyncHttpClient();

        asyncHttpClient.setTimeout(5000);

        try {

            String url = "http://" + serverName + relativeUrl;

            asyncHttpClient.get(url, params, new JsonHttpResponseHandler("UTF-8") {

                @Override

                public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {

                    super.onFailure(statusCode, headers, responseString, throwable);

                }

                @Override

                public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {

                    throwable.printStackTrace();

                    if (onHttpListner != null) onHttpListner.onHttpListener(false, getErrorJson(HTTP_ERROR));

                }

                @Override

                public void onSuccess(int statusCode, Header[] headers, JSONObject response) {

                    if (onHttpListner != null) {

                        if (statusCode == HTTP_OK) {

                            response = (response == null ? new JSONObject() : response);

                            onHttpListner.onHttpListener(true, response);

                        } else onHttpListner.onHttpListener(false, response);

                    }

                }

                @Override

                public void onSuccess(int statusCode, Header[] headers, JSONArray response) {

                    super.onSuccess(statusCode, headers, response);

                }

                @Override

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

                    super.onSuccess(statusCode, headers, responseString);

                }

            });

        } catch (Exception e) {

            e.printStackTrace();

            if (onHttpListner != null) onHttpListner.onHttpListener(false, getErrorJson(HTTP_ERROR));

        }

    }

    /**

     * post 请求

     */

    public static void post(final String serverName, final String relativeUrl, RequestParams params, final OnHttpListener<JSONObject> onHttpListner) {

        if (params == null) params = new RequestParams();

        AsyncHttpClient asyncHttpClient = new AsyncHttpClient();

        asyncHttpClient.setTimeout(5000);

        try {

            String url = "http://" + serverName + relativeUrl;

            asyncHttpClient.post(url, params, new JsonHttpResponseHandler("UTF-8") {

                @Override

                public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {

                    super.onFailure(statusCode, headers, responseString, throwable);

                }

                @Override

                public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) {

                    super.onFailure(statusCode, headers, throwable, errorResponse);

                }

                @Override

                public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {

                    throwable.printStackTrace();

                    if (onHttpListner != null) onHttpListner.onHttpListener(false, getErrorJson(HTTP_ERROR));

                }

                @Override

                public void onSuccess(int statusCode, Header[] headers, JSONArray response) {

                    super.onSuccess(statusCode, headers, response);

                }

                @Override

                public void onSuccess(int statusCode, Header[] headers, JSONObject response) {

                    if (onHttpListner != null) {

                        if (statusCode == HTTP_OK) {

                            response = (response == null ? new JSONObject() : response);

                            onHttpListner.onHttpListener(true, response);

                        } else onHttpListner.onHttpListener(false, response);

                    }

                }

                @Override

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

                    super.onSuccess(statusCode, headers, responseString);

                }

            });

        } catch (Exception e) {

            e.printStackTrace();

            if (onHttpListner != null) onHttpListner.onHttpListener(false, getErrorJson(HTTP_ERROR));

        }

    }

    //**************************************************************************************************************************

    //                                                                                                  其他访问服务器的方法

    //**************************************************************************************************************************

    /**

     * get请求,返回String

     */

    public static void get_AbsoluteUrl_String(final String url, RequestParams params, final OnHttpListener<String> onHttpListner) {

        if (params == null) params = new RequestParams();

        AsyncHttpClient asyncHttpClient = new AsyncHttpClient();

        asyncHttpClient.setTimeout(5000);

        try {

            asyncHttpClient.get(url, params, new AsyncHttpResponseHandler() {

                @Override

                public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {

                    if (onHttpListner != null) onHttpListner.onHttpListener(false, arg2 == null ? "error" : new String(arg2));

                }

                @Override

                public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {

                    if (arg0 == HTTP_OK) {

                        if (onHttpListner != null) onHttpListner.onHttpListener(true, arg2 == null ? "error" : new String(arg2));

                    } else {

                        if (onHttpListner != null) onHttpListner.onHttpListener(false, arg2 == null ? "error" : new String(arg2));

                    }

                }

            });

        } catch (Exception e) {

            e.printStackTrace();

            if (onHttpListner != null) onHttpListner.onHttpListener(false, "");

        }

    }

    /**

     * get请求,返回JSONArray

     */

    public static void get_AbsoluteUrl_JSONArray(final String absoulteUrl, RequestParams params, final OnHttpListener<JSONArray> onHttpListner) {

        AsyncHttpClient asyncHttpClient = new AsyncHttpClient();

        asyncHttpClient.setTimeout(5000);

        asyncHttpClient.get(absoulteUrl, params, new JsonHttpResponseHandler("UTF-8") {

            @Override

            public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) {

                super.onFailure(statusCode, headers, throwable, errorResponse);

            }

            @Override

            public void onSuccess(int statusCode, Header[] headers, JSONArray response) {

                if (onHttpListner != null) {

                    if (statusCode == HTTP_OK) {

                        response = (JSONArray) (response == null ? (new JSONObject()) : response);

                        onHttpListner.onHttpListener(true, response);

                    } else onHttpListner.onHttpListener(false, response);

                }

            }

        });

    }

    /**

     * https post请求

     */

    public static void httpsPost(String url, RequestParams params, final OnHttpListener<String> onHttpListener) {

        if (params == null) params = new RequestParams();

        AsyncHttpClient asyncHttpClient = new AsyncHttpClient();

        KeyStore trustStore = null;

        try {

            trustStore = KeyStore.getInstance(KeyStore.getDefaultType());

        } catch (KeyStoreException e1) {

            e1.printStackTrace();

        }

        try {

            trustStore.load(null, null);

        } catch (NoSuchAlgorithmException e1) {

            e1.printStackTrace();

        } catch (CertificateException e1) {

            e1.printStackTrace();

        } catch (IOException e1) {

            e1.printStackTrace();

        }

        MySSLSocketFactory socketFactory = null;

        try {

            socketFactory = new MySSLSocketFactory(trustStore);

        } catch (KeyManagementException e1) {

            e1.printStackTrace();

        } catch (UnrecoverableKeyException e1) {

            e1.printStackTrace();

        } catch (NoSuchAlgorithmException e1) {

            e1.printStackTrace();

        } catch (KeyStoreException e1) {

            e1.printStackTrace();

        }

        socketFactory.setHostnameVerifier(MySSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

        asyncHttpClient.setSSLSocketFactory(socketFactory);

        asyncHttpClient.setTimeout(5000);

        try {

            asyncHttpClient.post(url, params, new AsyncHttpResponseHandler() {

                @Override

                public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {

                    if (onHttpListener != null) onHttpListener.onHttpListener(false, arg2 == null ? "error" : new String(arg2));

                }

                @Override

                public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {

                    if (arg0 == HTTP_OK) {

                        if (onHttpListener != null) onHttpListener.onHttpListener(true, arg2 == null ? "error" : new String(arg2));

                    } else {

                        if (onHttpListener != null) onHttpListener.onHttpListener(false, arg2 == null ? "error" : new String(arg2));

                    }

                }

            });

        } catch (Exception e) {

            e.printStackTrace();

            if (onHttpListener != null) onHttpListener.onHttpListener(false, "");

        }

    }

    //**************************************************************************************************************************

    //                                                                                                           其他方法

    //**************************************************************************************************************************

    /**

     * 根据错误信息生成相应的json对象

     */

    public static JSONObject getErrorJson(String error) {

        JSONObject obj = new JSONObject();

        try {

            obj.put("error", error);

        } catch (JSONException e) {

            e.printStackTrace();

        }

        return obj;

    }

    /**

     * 添加ky-value到Requestparams

     */

    public static void addRequestParam(RequestParams params, String key, String value) {

        if (params == null) params = new RequestParams();

        params.add(key, value);

    }

    /**

     * 设置持久化保存cookie

     */

    public static void saveCookie(Context context) {

        AsyncHttpClient asyncHttpClient = new AsyncHttpClient();

        PersistentCookieStore cookieStore = new PersistentCookieStore(context);

        asyncHttpClient.setCookieStore(cookieStore);

    }

    public interface OnHttpListener<T> {

        public void onHttpListener(boolean httpSuccessed, T obj);

    }

}

AsyncHttp再封装


/**AsyncHttp再封装后的简易工具类*/

public class AsyncXiuHttpHelper {

    //    public static final String SERVER_URL = "api.95xiu.com";

    //    public static final String WEB_SERVER_URL = "chat.95xiu.com";

    //    public static final int LIVE_WEB_PORT = 3016;

    public static final String SERVER_URL = "tapi.95xiu.com";

    public static final String WEB_SERVER_URL = "tapi.95xiu.com";

    public static final int LIVE_WEB_PORT = 3014;

    /**

     * get 请求

     * @param relativeUrl  相对地址,如"/user/loginv2.php"

     * @param params   请求参数

     * @param onHttpListner   成功或失败时的监听,在回调方法中获取返回的数据

     */

    public static void get(final String relativeUrl, RequestParams params, final OnHttpListener<JSONObject> onHttpListner) {

        params = FormatRequestParams(params);

        AsyncHttpHelper.get(SERVER_URL, relativeUrl, params, onHttpListner);

    }

    /**

     *  post 请求

     * @param relativeUrl  相对地址,如"/user/loginv2.php"

     * @param params   请求参数

     * @param onHttpListner   成功或失败时的监听,在回调方法中获取返回的数据

     */

    public static void post(final String relativeUrl, RequestParams params, final OnHttpListener<JSONObject> onHttpListner) {

        params = FormatRequestParams(params);

        AsyncHttpHelper.post(SERVER_URL, relativeUrl, params, onHttpListner);

    }

    /**

     * 返回添加了基础信息的RequestParams

     */

    private static RequestParams FormatRequestParams(RequestParams params) {

        if (params == null) params = new RequestParams();

        //params.put("imei", Properties.IMEI);

        //params.put("channel", Properties.CN);

        //params.put("session_id", AppUser.getInstance().getUser().getuSessionId());

        //params.put("version_code", Properties.VERSION_CODE);

        return params;

    }

}

进度条对话框


/**显示、隐藏进度对话框的工具类*/

public class ProgressDialogUtil {

    private static ProgressDialogView progressDialog;

    /**显示自定义的进度对话框,不可取消*/

    public static void showProgressDialog(Context context, String title, String message) {

        dismissProgressDialog();

        progressDialog = new ProgressDialogView(context);

        progressDialog.setTitle(title);

        progressDialog.setMessage(message);

        progressDialog.setCancelable(false);

        progressDialog.show();

    }

    /**显示自定义的进度对话框*/

    public static void showProgressDialog(Context context, String title, String message, boolean cancelable, OnCancelListener cancelListener) {

        dismissProgressDialog();

        progressDialog = new ProgressDialogView(context);

        progressDialog.setTitle(title);

        progressDialog.setMessage(message);

        progressDialog.setCancelable(cancelable);

        progressDialog.setOnCancelListener(cancelListener);

        progressDialog.show();

    }

    /** 取消显示带进度条的对话框 */

    public static void dismissProgressDialog() {

        if (progressDialog != null && progressDialog.isShowing()) {

            try {

                progressDialog.dismiss();

            } catch (IllegalArgumentException e) {

            }

        }

        progressDialog = null;

    }

}

来自为知笔记(Wiz)

时间: 2024-11-08 22:11:38

AsyncHttpClient httpURLCon httpClient AsyncTask 访问服务器的相关文章

httpclient + AsyncTask 请求数据 || httpclient + handler 请求数据

public class MyAsy extends AsyncTask<String, Integer, String> { private String json; @Override    protected String doInBackground(String... params) {        // TODO Auto-generated method stub        // 实例化HttpClient        HttpClient client = new De

Android网络编程 HttpUrlConnection HttpClient AsyncTask

前面几篇文章介绍了Android中常用的http框架:volley,所谓框架者无非就是对我们所需的一系列操作进行了封装,简化了我们的工作. 但万变不离其宗,我们还是需要掌握Android原生的网络操作类,所以这篇文章主要介绍这两个类, HTTPUrlConnection HTTPClient,以及常需要用到的AsyncTask. 本文代码github地址:UseAsyncTask 1,HttpUrlConnection 一个UrlConnection常用来通过网络发送和获取数据,数据可以使任何类

AsyncTask 异步处理

package com.ch.day8_asynctaskdemo; import java.util.ArrayList; import com.ch.myutils.NetWorkUtil; import android.os.AsyncTask;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.util.Log;import android.v

Huan1

package com.bwie.day20_1406a; import java.io.IOException;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set; import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.clie

Android 获取并显示远程图片 Picasso框架的使用(一)

转载请注明出处:明桑Android 在Android开发中,常需要从远程获取图片并显示在客户端,当然我们可以使用原生HttpUrlConnection和AsyncTask等操作来完成,但并不推荐,因为这样不仅需要我们编写大量的代码,还需要处理缓存和下载管理等,最好自己封装成库或者采用第三方库: Picasso:A Powerful Image Downloading and Caching Library for Android 根据名字就知道它是跟什么相关了(Picasso:毕加索)它的基本操

Android客户端和Servlet服务器端通过JSON交互

本文结构如下: 1. android和servlet之间的直接信息传递(不通过json) 1.1 android端代码 1.2 servlet端代码 2. android和servlet之间通过json进行交互 2.1 android端代码 2.2 servlet端代码 ============================================================= 1. android和servlet之间的直接信息传递 在android端通过httpclient去访问

25类Android常用开源框架

1.图片加载,缓存,处理 框架名称 功能描述 Android Universal Image Loader 一个强大的加载,缓存,展示图片的库,已过时 Picasso 一个强大的图片下载与缓存的库 Fresco 一个用于管理图像和他们使用的内存的库 Glide 一个图片加载和缓存的库,使用的App有:网易新闻 GlidePalette Android Lollipop Palette is now easy to use with Glide PicassoPalette Android Lol

Volley的学习笔记

Volley 回忆xutils:快速开发型框架,DbUtils(orm),ViewUtils(ioc),HttpUtils,BitmapUtils 其他的快速开发型框架:andBase,thinkandroid,loonandroid,dhroid orm:对象关系型映射 db:create table t_table(_id integer primary key autoincret-); insert–>save(obj) ioc:控制反转 Obj obj = new Obj(); 对象的

Android-Async-Http使用记录

介绍: Android-Async-Http是一个Android的开源网络请求类库.官方项目地址:http://loopj.com/android-async-http/.网络请求无非就是从服务器上获取数据,往服务器上上传数据,这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,不会阻塞主UI线程,并且通过回调方法处理请求结果.Android-Async-Http处理正常的获取内容,下载,上传,包括带cookies访问都