Volley
需导入eu.the4thfloor.volley:com.android.volley:2015.05.28这个包
MainActivity(单例设计目的:每次请求时都生成同一个消息请求队列,而没有必要每次请求都生成一个新的消息队列,)
public class VolleyActivity extends Activity implements View.OnClickListener{
private TextView mTextViewVolley;
private Button mButtonVolleyGet;
private Button mButtonVolleyPost;
private NetworkImageView mNetworkImageView;
private Button mButtonGetImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_volley);
mTextViewVolley= (TextView) findViewById(R.id.textview_volley);
mButtonVolleyGet= (Button) findViewById(R.id.button_volley_get);
mButtonVolleyPost= (Button) findViewById(R.id.button_volley_post);
mNetworkImageView= (NetworkImageView) findViewById(R.id.network_image);
mButtonGetImage= (Button) findViewById(R.id.get_image);
mButtonVolleyGet.setOnClickListener(this);
mButtonVolleyPost.setOnClickListener(this);
mButtonGetImage.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch(view.getId()){
//没使用单例前,每次请求都生成一个新的消息队列
case R.id.button_volley_get:
RequestQueue queue= Volley.newRequestQueue(getApplicationContext());
StringRequest request=new StringRequest(Request.Method.GET,"http://www.360.com", new Response.Listener<String>(){
@Override
public void onResponse(String response) {
mTextViewVolley.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mTextViewVolley.setText("网络连接错误");
}
});
queue.add(request);
break;
//使用单例,生成的消息队列都是同一个消息队列
case R.id.button_volley_post:
StringRequest request2=new StringRequest(Request.Method.POST,"http://192.168.0.85:8080/JavaEE/MyTestServlet", new Response.Listener<String>(){
@Override
public void onResponse(String response) {
mTextViewVolley.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mTextViewVolley.setText("网络连接错误");
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String,String> map=new HashMap<String, String>();
map.put("username","zhangsan");
map.put("password","123456");
return map;
}
};
MySingleton.getInstance(getApplicationContext()).addToRequestQueue(request2);
break;
case R.id.get_image:
mNetworkImageView.setImageUrl("http://www.daxueit.com/upload/201408/13/101047281001237.png", MySingleton.getInstance(this).getImageLoader());
break;
}
}
}
网页错误时:
NetworkImageView
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/network_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.android.volley.toolbox.NetworkImageView>
MySingleton(单例设计)
public class MySingleton {
private static MySingleton mInstance;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static Context mContext;
private MySingleton(Context context) {
mContext= 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(mContext.getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
public ImageLoader getImageLoader() {
return mImageLoader;
}
}
服务器端:
xUtils
public class XUtilsActivity extends Activity implements View.OnClickListener {
@ViewInject(R.id.button_xutils_get)//注解
private Button mButtonxUtilsGet;
@ViewInject(R.id.button_xutils_post)
private Button mButtonxUtilsPost;
@ViewInject(R.id.textview)
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xutils);
ViewUtils.inject(this);//注解
// mButtonxUtilsGet= (Button) findViewById(R.id.button_xutils_get);
// mButtonxUtilsPost= (Button) findViewById(R.id.button_xutils_post);
// mTextView= (TextView) findViewById(R.id.textview);
// mButtonxUtilsGet.setOnClickListener(this);
// mButtonxUtilsPost.setOnClickListener(this);//使用注解时,这些可以省略
}
@OnClick({R.id.button_xutils_get,R.id.button_xutils_post})
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.button_xutils_get:
doGet();
break;
case R.id.button_xutils_post:
doPost();
break;
}
}
//xUtils的get方法
public void doGet(){
HttpUtils client=new HttpUtils();
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("网络连接错误");
}
});
}
//xUtils的post方法
public void doPost(){
HttpUtils clientpost=new HttpUtils();
RequestParams params=new RequestParams();
params.addBodyParameter("username","xutils");
params.addBodyParameter("password","123");
clientpost.send(HttpRequest.HttpMethod.POST, "http://192.168.0.85:8080/JavaEE/MyTestServlet", params, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
mTextView.setText(responseInfo.result);
}
@Override
public void onFailure(HttpException e, String s) {
mTextView.setText("网络连接错误");
}
});
}
}
get:
post:
服务器端: