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