开源框架android-async-http使用

jopen 11年前

官网:https://github.com/loopj/android-async-http

 

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

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

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


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方法,在要使用的地方,调用该类就行了。

具体使用的类:

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());                  }              }          });      }  }

布局文件:


<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的访问权限