android框架学习之Volley

        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() {

					@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 getParams() throws AuthFailureError {
				HashMap parmas = new HashMap();
				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() {
					// 请求成功是调用的方法
					@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);
	}

}
客户端布局



    

服务器

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. 
*/ 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 } }


android框架学习之Volley_第1张图片


你可能感兴趣的:(android高级学习)