Volley是一个基于HTTP协议的网络通信框架,首先我们需要去网络上下载一个Volley的jar包,如果找不到的话,也可以在下面留下邮箱我发给你,然后我们建立一个android项目,将volley.jar复制到libs目录就可以了,使用Volley最大的好处就是不用自己启动子线程,我们也不需要担心并发的问题,而且volley自带了队列请求机制,简单来说我们就需要把每种请求放到队列里面,就可以了,你们可以将我的代码一个点一个点的分开来看,应该还是蛮清晰的。
因为是基于网络的,这里我也写了一个网络测试的服务器,其实就是建立了一个服务器,删除了一些消息,添加了一些图片,如果不知道服务器如何创建的,那么就去我之前的一片web里面的文章看吧,如果需要源码也可以留下邮箱。
客户端activity
package com.jk.volleytest;
import java.util.HashMap;
import java.util.Map;
import com.android.volley.AuthFailureError;
import com.android.volley.RequestQueue;
import com.android.volley.Request.Method;
import com.android.volley.Response;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import android.os.Bundle;
import android.app.Activity;
import android.app.DownloadManager.Request;
import android.graphics.Bitmap;
import android.text.InputFilter.LengthFilter;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
// 声明3个buttn分别是get请求,post请求,image请求
Button btn_get, btn_post, btn_image;
// 消息的队列
RequestQueue mQueue;
// 图片
NetworkImageView niv;
// 图片的url
String IMGurl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
// 得到Volley的消息队列
mQueue = Volley.newRequestQueue(this);
// 绑定图片视图
niv = (NetworkImageView) findViewById(R.id.show_image);
// 绑定get按钮
btn_get = (Button) findViewById(R.id.btn_get);
btn_get.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 调用getRequest请求的方法
getRequest();
}
});
// 绑定post按钮
btn_post = (Button) findViewById(R.id.btn_post);
btn_post.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 调用postRequest请求的方法
postRequest();
}
});
// 获得获取image请求的按钮
btn_image = (Button) findViewById(R.id.btn_img);
btn_image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 调用获得图片的方法
getImage();
}
});
}
protected void getImage() {
String IMGurl = "http://192.168.0.148:8080/VolletTest/anni.png";
ImageLoader loader = new ImageLoader(mQueue, new ImageCache() {
@Override
public void putBitmap(String url, Bitmap bitmap) {
// 当getBitmap里面没有图片的时候执行这个方法
}
@Override
public Bitmap getBitmap(String url) {
// 首先从这里获得图片
return null;
}
});
// 设置默认的显示图片
niv.setDefaultImageResId(R.drawable.ic_launcher);
// 设置错误的显示的图片
niv.setErrorImageResId(R.drawable.ic_launcher);
// 从网络获得图片
niv.setImageUrl(IMGurl, loader);
}
protected void postRequest() {
StringRequest posReq = new StringRequest(Method.POST,
"http://192.168.0.148:8080/VolletTest/servlet/TestServlet",
new Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this, response,
Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "请求失败",
Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> parmas = new HashMap<String, String>();
parmas.put("hello", "welcome");
parmas.put("world", "what wrong");
return parmas;
}
};
mQueue.add(posReq);
}
private void getRequest() {
StringRequest getReq = new StringRequest(Method.GET,
"http://192.168.0.148:8080/VolletTest/servlet/TestServlet",
new Listener<String>() {
// 请求成功是调用的方法
@Override
public void onResponse(String response) {
// 打印出服务器返回回来的消息
Toast.makeText(MainActivity.this, response,
Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
// 请求失败时返回的方法
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, "申请错误",
Toast.LENGTH_SHORT).show();
}
});
// 将请求信息添加到请求队列
mQueue.add(getReq);
}
}
客户端布局
<LinearLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/btn_get"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="get" />
<Button
android:id="@+id/btn_post"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="post" />
<Button
android:id="@+id/btn_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn_image" />
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/show_image"
android:layout_width="120dp"
android:layout_height="120dp" >
</com.android.volley.toolbox.NetworkImageView>
</LinearLayout>
服务器
package com.jk.test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet extends HttpServlet {
/**
* Constructor of the object.
*/
public TestServlet() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print(this.getClass());
out.println(", using the POST method");
out.flush();
out.close();
}
public void init() throws ServletException {
// Put your code here
}
}