android下载网络数据的几种方法

时间:2021-06-24 19:45:47


本文实现按钮点击下载网页数据在Textview显示 android下载网络数据的几种方法 < 一> Xutils的使用,君子生非异也,善假于物也。良好的框架有时使我们的工作效率事半功倍,也会减少许多不必要的麻烦。xUtils 包含了很多实用的android工具。 xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls 最低兼容android 2.2 (api level 8)
private TextView tv;
private Button button;
HttpUtils httpUtils;
String path ="http://www.huxiu.com/article/139078/1.html?f=index_feed_article";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
assignViews();
button.setOnClickListener(this);
}
private void assignViews() {
tv = (TextView) findViewById(R.id.image);
button = (Button) findViewById(R.id.button);
httpUtils = new HttpUtils();
}
//此处为下载数据,需要导入xutils.jar
@Override
public void onClick(View v) {
httpUtils.send(HttpRequest.HttpMethod.GET, path, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
String tt = responseInfo.result;
tv.setText(tt);
}
@Override
public void onFailure(HttpException e, String s) {
}
});
}
<二>OkHttp使用,需要导入 okhttpokio 的jar包。OkHttp是一个相对成熟的解决方案,据说Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。所以我们更有理由相信OkHttp的强大。OkHttp 处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题。使用 OkHttp 无需重写您程序中的网络代码。OkHttp实现了几乎和java.net.HttpURLConnection一样的API。如果你用了 Apache HttpClient,则OkHttp也提供了一个对应的okhttp-apache 模块。
  private TextView tv;
private Button button;
OkHttpClient client ;
String path = "http://www.huxiu.com/article/139078/1.html?f=index_feed_article";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
assignViews();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
runString(path);
} catch (IOException e) {
e.printStackTrace();
}
}
});


}
private void assignViews() {
client = new OkHttpClient();
tv = (TextView) findViewById(R.id.image);
button = (Button) findViewById(R.id.button);
}


public void runString(String url) throws IOException {
Request request = new Request.Builder().url(url).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String ss = response.body().string();
// 在主线程更新ui
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText(ss);
}
});
}
});

}

<三> volley  需要导入volley 的jar包。

 Volley是Goole在2013年Google I/O大会上推出了一个新的网络通信框架,它是开源的。从名字由来和配图中无数急促的火箭可以看出 Volley 的特点:特别适合数据量小,通信频繁的网络操作。(个人认为 Android 应用中绝大多数的网络操作都属于这种类型)。

  Volley加载图片实现了两级缓存(网络缓存、文件缓存),没有实现内存的缓存。Volley已经把各种异步任务、图片采样都封装好了。内存缓存使用lrucache类实现,需要我们手动添加进去。没有使用软引用缓存。因为4.0之后的android系统已经不推荐使用软引用缓存了。


  private TextView tv;
private Button button;
RequestQueue requestQueue;
String path = "http://www.huxiu.com/article/139078/1.html?f=index_feed_article";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
assignViews();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
downLoadStr();
}
});

}
public void downLoadStr(){
StringRequest stringRequest = new StringRequest(path, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
tv.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {

}
});
requestQueue.add(stringRequest);
}
private void assignViews() {
requestQueue = Volley.newRequestQueue(getApplicationContext());
tv = (TextView) findViewById(R.id.image);
button = (Button) findViewById(R.id.button);
}
此处会出现中文乱码,解决方案需要重写类StringRequest


















本文实现按钮点击下载网页数据在Textview显示android下载网络数据的几种方法<一> Xutils的使用,君子生非异也,善假于物也。良好的框架有时使我们的工作效率事半功倍,也会减少许多不必要的麻烦。xUtils 包含了很多实用的android工具。 xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls 最低兼容android 2.2 (api level 8)
private TextView tv;
private Button button;
HttpUtils httpUtils;
String path ="http://www.huxiu.com/article/139078/1.html?f=index_feed_article";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
assignViews();
button.setOnClickListener(this);
}
private void assignViews() {
tv = (TextView) findViewById(R.id.image);
button = (Button) findViewById(R.id.button);
httpUtils = new HttpUtils();
}
//此处为下载数据,需要导入xutils.jar
@Override
public void onClick(View v) {
httpUtils.send(HttpRequest.HttpMethod.GET, path, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
String tt = responseInfo.result;
tv.setText(tt);
}
@Override
public void onFailure(HttpException e, String s) {
}
});
}
<二>OkHttp使用,需要导入 okhttpokio 的jar包。OkHttp是一个相对成熟的解决方案,据说Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。所以我们更有理由相信OkHttp的强大。OkHttp 处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题。使用 OkHttp 无需重写您程序中的网络代码。OkHttp实现了几乎和java.net.HttpURLConnection一样的API。如果你用了 Apache HttpClient,则OkHttp也提供了一个对应的okhttp-apache 模块。
  private TextView tv;
private Button button;
OkHttpClient client ;
String path = "http://www.huxiu.com/article/139078/1.html?f=index_feed_article";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
assignViews();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
runString(path);
} catch (IOException e) {
e.printStackTrace();
}
}
});


}
private void assignViews() {
client = new OkHttpClient();
tv = (TextView) findViewById(R.id.image);
button = (Button) findViewById(R.id.button);
}


public void runString(String url) throws IOException {
Request request = new Request.Builder().url(url).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String ss = response.body().string();
// 在主线程更新ui
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText(ss);
}
});
}
});

}

<三> volley  需要导入volley 的jar包。

 Volley是Goole在2013年Google I/O大会上推出了一个新的网络通信框架,它是开源的。从名字由来和配图中无数急促的火箭可以看出 Volley 的特点:特别适合数据量小,通信频繁的网络操作。(个人认为 Android 应用中绝大多数的网络操作都属于这种类型)。

  Volley加载图片实现了两级缓存(网络缓存、文件缓存),没有实现内存的缓存。Volley已经把各种异步任务、图片采样都封装好了。内存缓存使用lrucache类实现,需要我们手动添加进去。没有使用软引用缓存。因为4.0之后的android系统已经不推荐使用软引用缓存了。


  private TextView tv;
private Button button;
RequestQueue requestQueue;
String path = "http://www.huxiu.com/article/139078/1.html?f=index_feed_article";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
assignViews();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
downLoadStr();
}
});

}
public void downLoadStr(){
StringRequest stringRequest = new StringRequest(path, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
tv.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {

}
});
requestQueue.add(stringRequest);
}
private void assignViews() {
requestQueue = Volley.newRequestQueue(getApplicationContext());
tv = (TextView) findViewById(R.id.image);
button = (Button) findViewById(R.id.button);
}
此处会出现中文乱码,解决方案需要重写类StringRequest