博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android-async-http
阅读量:5248 次
发布时间:2019-06-14

本文共 9864 字,大约阅读时间需要 32 分钟。

工具类: 

import com.loopj.android.http.AsyncHttpClient;import com.loopj.android.http.AsyncHttpResponseHandler;import com.loopj.android.http.BinaryHttpResponseHandler;import com.loopj.android.http.JsonHttpResponseHandler;import com.loopj.android.http.RequestParams;public class HttpUtil {    private static     AsyncHttpClient client =new AsyncHttpClient();    //实例话对象    static    {        client.setTimeout(11000);   //设置链接超时,如果不设置,默认为10s    }     //不带参数  用一个完整url获取一个string对象    public static void get(String urlString,AsyncHttpResponseHandler res)       {        client.get(urlString, res);    }     //带参数 获取返回字符串    public static void get(String urlString,RequestParams params,AsyncHttpResponseHandler res) //     {        client.get(urlString, params,res);    }    //  不带参数,获取json对象或者数组    public static void get(String urlString,JsonHttpResponseHandler res) //    {        client.get(urlString, res);    }     //带参数,获取json对象或者数组    public static void get(String urlString,RequestParams params,JsonHttpResponseHandler res)      {        client.get(urlString, params,res);    }    // 下载数据使用,会返回byte数据    public static void get(String uString, BinaryHttpResponseHandler bHandler)  //    {        client.get(uString, bHandler);    }    //    public static AsyncHttpClient getClient()    {        return client;    }}

利用以上工具的实例( get 请求 ): 

// 不带参数 ,返回String  (GET)    public void method1(View view) {        pDialog = ProgressDialog.show(this, "请稍等", "数据加载中");        //一个菜谱的url地址        String urlString = "http://client.azrj.cn/json/cook/cook_list.jsp?type=1&p=2&size=10"; //         HttpUtil.get(urlString, new AsyncHttpResponseHandler() {            public void onSuccess(String arg0) { // 获取数据成功会调用这里                pDialog.dismiss();  //关闭                textView.setText("获取json数据成功,看下面");                textView2.setText(arg0);                Log.i("hck", arg0);            };            public void onFailure(Throwable arg0) { // 失败,调用                Toast.makeText(MainActivity.this, "onFailure",                        Toast.LENGTH_LONG).show();            };            public void onFinish() { // 完成后调用,失败,成功,都要掉            };        });    }        // 带参数  返回的是JSONArray,    public void method2(View view) {        String urlString = "http://client.azrj.cn/json/cook/cook_list.jsp?";        RequestParams params = new RequestParams(); // 绑定参数        params.put("type", "1");        params.put("p", "2");        params.put("size", "10");        HttpUtil.get(urlString, params, new JsonHttpResponseHandler() {            public void onSuccess(JSONArray arg0) { // 成功后返回一个JSONArray数据                Log.i("hck", arg0.length() + "");                try {                    textView.setText("菜谱名字:"                            + arg0.getJSONObject(2).getString("name")); //返回的是JSONArray, 获取JSONArray数据里面的第2个JSONObject对象,然后获取名字为name的数据值                } catch (Exception e) {                    Log.e("hck", e.toString());                }            };            public void onFailure(Throwable arg0) {                Log.e("hck", " onFailure" + arg0.toString());            };            public void onFinish() {                Log.i("hck", "onFinish");            };            public void onSuccess(JSONObject arg0) {   //返回的是JSONObject,会调用这里                Log.i("hck", "onSuccess ");                try {                    textView.setText("菜谱名字:"                            + arg0.getJSONArray("list").getJSONObject(0)                                    .getString("name"));                } catch (Exception e) {                    Log.e("hck", e.toString());                }            };        });    }    //    不带参数  返回的是JSONObject,    public void method3(View view) {        String urlString = "http://client.azrj.cn/json/cook/cook_list.jsp?type=1&p=2&size=10";        HttpUtil.get(urlString, new JsonHttpResponseHandler() {            public void onSuccess(JSONObject arg0) {                try {                    textView.setText("菜谱名字:"                            + arg0.getJSONArray("list").getJSONObject(1)                                    .getString("name"));                } catch (Exception e) {                    Log.e("hck", e.toString());                }            };        });    }    // 带参数 , 返回String    public void method4(View view) {        String urlString = "http://client.azrj.cn/json/cook/cook_list.jsp?";        final RequestParams params = new RequestParams();        params.put("type", "1");        params.put("p", "2");        params.put("size", "10");        HttpUtil.get(urlString, params, new AsyncHttpResponseHandler() {            public void onSuccess(String arg0) {                try {                    JSONObject jObject = new JSONObject(arg0);                    textView.setText("菜谱名字:"                            + jObject.getJSONArray("list").getJSONObject(2)                                    .getString("name"));                    Log.i("hck", params.getEntity().toString());                } catch (Exception e) {                }            };        });    }     // 不带参数 下载图片 保存sd卡    public void method5(View view) {        String url = "http://f.hiphotos.baidu.com/album/w%3D2048/sign=38c43ff7902397ddd6799f046dbab3b7/9c16fdfaaf51f3dee973bf7495eef01f3b2979d8.jpg";        HttpUtil.get(url, new BinaryHttpResponseHandler() {            @Override            public void onSuccess(byte[] arg0) {                super.onSuccess(arg0);                File file = Environment.getExternalStorageDirectory();                File file2 = new File(file, "cat");                file2.mkdir();                file2 = new File(file2, "cat.jpg");                try {                    FileOutputStream oStream = new FileOutputStream(file2);                    oStream.write(arg0);  //byte[] (arg0)  写入到 file2                    oStream.flush();                    oStream.close();                    textView.setText("可爱的猫咪已经保存在sdcard里面");                } catch (Exception e) {                    e.printStackTrace();                    Log.i("hck", e.toString());                }            }        });    }

其他: 

// 有参数  post 上传文件    public void uploadClick(View view){        String path="http://10.0.2.2:8080/jsontest/servlet/UploadServlet";        File myFile = new File("/sdcard/cat/cat.jpg");        RequestParams params = new RequestParams();        try {            params.put("filename", myFile);                        AsyncHttpClient client = new AsyncHttpClient();            client.post(path, params, new AsyncHttpResponseHandler(){                @Override                public void onSuccess(int statusCode, String content) {                    // TODO Auto-generated method stub                    super.onSuccess(statusCode, content);                    Toast.makeText(MainActivity.this, "上传成功!", Toast.LENGTH_LONG).show();                }                                            });                    } catch(FileNotFoundException e) {                    }    }//   有参数  post 上传图片         String path="http://sv1.livechano.com:8080/upload.action?&action=1.6&type=1&ext=png";        File myFile = new File("/sdcard/test.png");        RequestParams params = new RequestParams();        try {       //注意了,这种方法上传的参数一定要 设置params.put("image", myFile,"application/octet-stream");否则就会失败            params.put("image", myFile,"application/octet-stream");            AsyncHttpClient client = new AsyncHttpClient();                        client.post(path, params, new AsyncHttpResponseHandler(){                                @Override                public void onFailure(Throwable error, String content) {                    // TODO Auto-generated method stub                    super.onFailure(error, content);                    Toast.makeText(MainActivity.this, "上传失败!"+content, Toast.LENGTH_LONG).show();                }                                @Override                public void onSuccess(int statusCode, String content) {                    // TODO Auto-generated method stub                    super.onSuccess(statusCode, content);                    System.out                            .println("content:    "+content);                    Toast.makeText(MainActivity.this, "上传成功!"+content, Toast.LENGTH_LONG).show();                }                                            });                    } catch(FileNotFoundException e) {                    }        // 带json参数的 post请求try {              AsyncHttpClient client = new AsyncHttpClient();              JSONObject jsonObject = new JSONObject();              jsonObject.put("username", "ryantang");              StringEntity stringEntity = new StringEntity(jsonObject.toString());              client.post(MainActivity.this, "http://api.com/login", stringEntity, "application/json", new JsonHttpResponseHandler(){                  @Override                  public void onSuccess(JSONObject jsonObject) {                      super.onSuccess(jsonObject);                                        }                                });       } catch (JSONException e) {             e.printStackTrace();      } catch (UnsupportedEncodingException e) {            e.printStackTrace();      }

附录:官方建议使用一个静态的AsyncHttpClient,像下面的这样 

public class TwitterRestClient {    private static final String BASE_URL = "http://api.twitter.com/1/";     private static AsyncHttpClient client = new AsyncHttpClient();     public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {        client.get(getAbsoluteUrl(url), params, responseHandler);    }     public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {        client.post(getAbsoluteUrl(url), params, responseHandler);    }     private static String getAbsoluteUrl(String relativeUrl) {        return BASE_URL + relativeUrl;    }}

 

转载于:https://www.cnblogs.com/java-g/p/4136413.html

你可能感兴趣的文章
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>
BNU29140——Taiko taiko——————【概率题、规律题】
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
CentOS 简单命令
查看>>
使用 SharedPreferences 分类: Andro...
查看>>
TLA+(待续...)
查看>>
题解: [GXOI/GZOI2019]与或和
查看>>
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
vue项目中使用百度统计
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>