android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也很简单,下面做简单介绍,具体详细使用看官网:https://github.com/loopj/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的访问权限
扩展阅读
android开源框架android-async-http使用android-async-http框架库使用基础
android-async-http框架库使用入门
Android Tips - 专业填坑手册
Android 开发中的日常积累
为您推荐
Android ListView性能优化,异步加载图片android之程序自动更新的实现
Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现) .
Android中ListView分页加载数据
Android开发之--读取文件夹下图片生成略缩图并点击显示大图