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 } }