1、HttpClientDoGet
//activity中在onCreate中加MyAsyncTask类,然后再点击事件中设置,调用
public class MainActivity extends Activity implements View.OnClickListener {
……
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_doget:
MyAsyncTask task = new MyAsyncTask();
task.execute();
break;
……
class MyAsyncTask extends AsyncTask<String, Integer, String> {
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
HttpClient client = new DefaultHttpClient();
String urlString = "http://192.168.0.30:8080/MyWebTest/MyTestServerlet?username=zhangsan";
//直接跟在url后是doGet方法,如果想用doPost方法,改变这里的代码即可
HttpGet get = new HttpGet(urlString);
//设置服务器接收后的数据读取方式为utf-8
get.setHeader("Content-Type", "application/x-www-form-urlencoded;Charset=UTF-8");
try {
HttpResponse response = client.execute(get);//执行get方法得到服务器的返回的所有数据都在response中
StatusLine statusLine = response.getStatusLine();//httpClient访问服务器返回的表头
int code = statusLine.getStatusCode();//得到状态码
if (code == HttpURLConnection.HTTP_OK) {
HttpEntity entity = response.getEntity();//得到数据的实体
InputStream is = entity.getContent();//得到输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = br.readLine();
while (line != null) {
System.out.println(line);
line = br.readLine();
}
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "连接成功";
}
}
}
Volley
什么是Volley
在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。
这是Volley名称的由来: a burst or emission of many things or a large amount at once
在Google IO的演讲上,其配图是一幅发射火弓箭的图,有点类似流星。
Volley的执行机制图:
1、连接网络
首先把requestquene设置成单例,就不用每次都新建quene
public class MySingleton {
private static MySingleton mInstance;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static Context mCtx;
private MySingleton(Context context) {
mCtx = context;
mRequestQueue = getRequestQueue();
mImageLoader = new ImageLoader(mRequestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap>
cache = new LruCache<String, Bitmap>(20);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});
}
public static synchronized MySingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new MySingleton(context);
}
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
// getApplicationContext() is key, it keeps you from leaking the
// Activity or BroadcastReceiver if someone passes one in.
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
public ImageLoader getImageLoader() {
return mImageLoader;
}
}
case R.id.button_volley:
StringRequest request = new StringRequest(Request.Method.GET, "http://www.360.com", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
mTextView.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mTextView.setText("连接出错");
}
});
MySingleton.getInstance(getApplicationContext()).addToRequestQueue(request);
2、连接到服务器
case R.id.button_volley:
// RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
StringRequest request = new StringRequest(Request.Method.POST, "http://192.168.0.30:8080/MyWebTest/MyTestServerlet", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
mTextView.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mTextView.setText("连接出错");
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String,String> map = new HashMap<>();
map.put("username","zhangsan");//得到服务器的信息
return map;
}
};
MySingleton.getInstance(getApplicationContext()).addToRequestQueue(request);
break;
3、获得图片ImageLoader
case R.id.button_image:
mNetworkImageView.setImageUrl("http://p0.so.qhimg.com/t01a8b52838fabe2125.jpg", MySingleton.getInstance(this).getImageLoader());//传入图片地址
break;
xUtils
简介:
xUtils 包含了很多实用的android工具。xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响。同时需要注意的是,xUitls最低兼容android 2.2 (api level 8) 。
下面主要介绍它重要的四大组件:
一、ViewUtils
你受够了重复冗长的findViewById了嘛?你受够了各种监听事件的绑定了嘛?在这里,你只需要一句注解,如@ViewInject、@OnClick,就能轻松摆脱小白似的代码,大大的上了一个档次。
二、HttpUtils
支持的HTTP七种请求方式,非常便捷的满足你的接口请求的需要。同时还支持大文件上传下载,以及同步异步请求。
三、BitmapUtils
你的程序因OOM强制关闭过嘛?你在为加在网络图片头疼嘛?有了组件,你将永久摆脱前面的问题。
四、DbUtils
简单易用又出色的ORM框架,真的是谁用谁知道,直接轻松存储各种对象到sqlite数据库中,同时也能非常方便的进行各种条件查询,甚至分页查询,还有对表中数据的更新删除等操作,真正的实现。一行代码就可以进行增删改查。并且可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等,支持事务。
案例:
//GET方法连接网络
HttpUtils client = new HttpUtils();//初始化
//下面传入参数,实现 RequestCallBack的两个方法
client.send(HttpRequest.HttpMethod.GET, "http://www.360.com", new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
mTextview.setText(responseInfo.result);
}
@Override
public void onFailure(HttpException e, String s) {
mTextview.setText("网络连接出错");
}
});
//POST方法
HttpUtils client = new HttpUtils();
RequestParams params = new RequestParams();//用RequestParams来获取参数
params.addBodyParameter("username", "张三");
//下面传参时记得传入params
client.send(HttpRequest.HttpMethod.POST, "http://192.168.0.30:8080/MyWebTest/MyTestServerlet",params, new RequestCallBack<String>() {//ip为服务器的地址
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
mTextview.setText(responseInfo.result);
}
@Override
public void onFailure(HttpException e, String s) {
mTextview.setText("网络连接出错");
}
});
案例展示: