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

}


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


你可能感兴趣的:(android框架学习)