zoukankan      html  css  js  c++  java
  • async-http

    android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也很简单,下面做简单介绍,具体详细使用看官网:https://github.com/loopj/android-async-http

    1.新建项目,去官网下载zip包,解压,打开releases文件,把里面最新的jar包,考入项目工程libs目录下,引入包。

    2.通过1,就可以使用了,很简单,下面是自己写的demo,用它提供的各种不同方法完成从服务器获取一个json数据:


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    package com.http;
    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
        }
        public static void get(String urlString,AsyncHttpResponseHandler res)    //用一个完整url获取一个string对象
        {
            client.get(urlString, res);
        }
        public static void get(String urlString,RequestParams params,AsyncHttpResponseHandler res)   //url里面带参数
        {
            client.get(urlString, params,res);
        }
        public static void get(String urlString,JsonHttpResponseHandler res)   //不带参数,获取json对象或者数组
        {
            client.get(urlString, res);
        }
        public static void get(String urlString,RequestParams params,JsonHttpResponseHandler res)   //带参数,获取json对象或者数组
        {
            client.get(urlString, params,res);
        }
        public static void get(String uString, BinaryHttpResponseHandler bHandler)   //下载数据使用,会返回byte数据
        {
            client.get(uString, bHandler);
        }
        public static AsyncHttpClient getClient()
        {
            return client;
        }
    }



    这个类主要列出了我们常用的get方法,在要使用的地方,调用该类就行了。

    具体使用的类:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    package com.http;
     
    import java.io.File;
    import java.io.FileOutputStream;
     
    import org.json.JSONArray;
    import org.json.JSONObject;
     
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.os.Bundle;
    import android.os.Environment;
    import android.util.Log;
    import android.view.View;
    import android.widget.TextView;
    import android.widget.Toast;
     
    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 MainActivity extends Activity {
        private TextView textView; // 顶部textview
        private ProgressDialog pDialog;
        private TextView textView2; // 下面textview,显示获取的所有数据
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView = (TextView) findViewById(R.id.text);
            textView2 = (TextView) findViewById(R.id.text2);
        }
        public void method1(View view) {
            pDialog = ProgressDialog.show(this, "请稍等", "数据加载中");
            String urlString = "http://client.azrj.cn/json/cook/cook_list.jsp?type=1&p=2&size=10"; // 一個獲取菜谱的url地址
            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() { // 完成后调用,失败,成功,都要掉
                };
            });
        }
        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());
                    }
                };
            });
        }
        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());
                    }
                };
            });
        }
        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) {
                    }
                };
            });
        }
        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);
                        oStream.flush();
                        oStream.close();
                        textView.setText("可爱的猫咪已经保存在sdcard里面");
                    } catch (Exception e) {
                        e.printStackTrace();
                        Log.i("hck", e.toString());
                    }
                }
            });
        }
    }

    布局文件:


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <ScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
          android:gravity="center_horizontal"
        >
        <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
          android:gravity="center_horizontal">
        <TextView
            android:textColor="#FF0000"
            android:textSize="16sp"
           android:layout_marginTop="20dp"
         android:gravity="center_horizontal"
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="获取数据完成后会显示在这里" />
    <Button
        android:layout_marginTop="50dp"
        android:id="@+id/bt1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第一种"
        android:onClick="method1"
        />
    <Button
        android:id="@+id/bt2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第2种"
        android:onClick="method2"
        />
    <Button
        android:id="@+id/bt3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第3种"
          android:onClick="method3"
        />
    <Button
        android:id="@+id/bt4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第4种"
          android:onClick="method4"
        />
    <Button
        android:id="@+id/bt5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第5种"
          android:onClick="method5"
        />
      <TextView
            android:textColor="#FF0000"
            android:textSize="16sp"
           android:layout_marginTop="20dp"
         android:gravity="center_horizontal"
            android:id="@+id/text2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
             />
    </LinearLayout>
    </ScrollView>

    很简单很实用,上面只是get方法的,上传数据,和这个也差不多,大家自己建个服务器,试试。记得加入网文网络的权限和向sdcard的访问权限

  • 相关阅读:
    js 格式为2018-08-25 11:46:29 的日期比较方法
    ssh linux免密登录。。。。生产共钥到另一台主机
    linux shell脚本调用java main方法 代码传值
    linux shell脚本调用java main方法 代码
    java FTP各种操作
    java通过http服务执行shell命令
    linux ssh 应用
    java通过反射调用有参数的方法
    TranslucentTB汉化版安装教程及资源
    几行Python代码生成动态二维码 myqr的使用教程
  • 原文地址:https://www.cnblogs.com/1995hxt/p/4987311.html
Copyright © 2011-2022 走看看