volley google提供的一个关于网络请求的框架
参考:
http://blog.csdn.net/t12x3456/article/details/9221611
http://www.cnblogs.com/freexiaoyu/p/3446028.html
代码:
import org.json.JSONObject; import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v4.util.LruCache; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import com.android.volley.Request.Method; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.ImageLoader.ImageCache; import com.android.volley.toolbox.JsonObjectRequest; import com.android.volley.toolbox.NetworkImageView; import com.android.volley.toolbox.Volley; import com.android.volley.toolbox.ImageLoader.ImageListener; /** * Volley 测试 * * @Description:volley测试 * @author sleep * @date create date 2014年3月6日 * @version V1.0 */ public class MainActivity extends Activity implements View.OnClickListener { Button getJson, getImg, netWork; ImageView img; NetworkImageView workImg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getJson = (Button) findViewById(R.id.get_json); getJson.setOnClickListener(this); getImg = (Button) findViewById(R.id.get_image); getImg.setOnClickListener(this); netWork = (Button) findViewById(R.id.net_work); netWork.setOnClickListener(this); img = (ImageView) findViewById(R.id.img); workImg = (NetworkImageView) findViewById(R.id.net_work_img); } @Override public void onClick(View v) { if (v.equals(getJson)) { getJson("http://www.baidu.com/"); } else if (v.equals(getImg)) { setImg("http://c.hiphotos.baidu.com/image/w%3D2048/sign=2da8c99e8026cffc692ab8b28d394b90/7af40ad162d9f2d3cdc19be8abec8a136227cce1.jpg"); } else if (v.equals(netWork)) { setNetWorkImage("http://h.hiphotos.baidu.com/image/w%3D2048/sign=149929469113b07ebdbd570838ef9023/e61190ef76c6a7ef21700641fffaaf51f3de6607.jpg"); } } /* * Volley中,RequestQueue 为核心,所有访问都会使用到 * getJson 请求json JsonObjectRequest(请求类型,路径,null,结果监听,错误监听) * 第三个参数可能是用来上传,只是可能,没有细看 * * imageLoader LruCache:强引用,图片缓存的一种方式,20则表示缓存大小,这是引用类型缓存,不会保存在本地 * ImageLoader.getImageListener(ImageView,默认图片,加载失败时的图片) 都是用id,的,可以为0,表示没有 * * NetWorkImageView 可以用来代替ImageView,imageView加载的时候,直接去请求,不用通过事件去加载ImageView * */ /** * NetWorkImageView 测试 * * @param url */ private void setNetWorkImage(String url) { RequestQueue requestQueue = Volley.newRequestQueue(this); final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>( 20); ImageCache imageCache = new ImageCache() { @Override public void putBitmap(String key, Bitmap value) { lruCache.put(key, value); } @Override public Bitmap getBitmap(String key) { return lruCache.get(key); } }; ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache); workImg.setTag("url"); workImg.setImageUrl(url, imageLoader); } /** * 请求json * * @param url */ void getJson(String url) { // 请求json RequestQueue mQueue = Volley.newRequestQueue(this); JsonObjectRequest jsonRequest = new JsonObjectRequest(Method.GET, url, null, new Response.Listener<JSONObject>() { public void onResponse(JSONObject response) { // 正常返回结果 System.out.println(response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // 结果非json格式 Toast.makeText(MainActivity.this, "网络错误(-3)", Toast.LENGTH_SHORT).show(); } }); mQueue.add(jsonRequest); mQueue.start(); } /** * 加载图片 * * @param url */ void setImg(String url) { RequestQueue requestQueue = Volley.newRequestQueue(this); // 强引用、20个缓存 final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>( 20); ImageCache imageCache = new ImageCache() { @Override public void putBitmap(String key, Bitmap value) { lruCache.put(key, value); } @Override public Bitmap getBitmap(String key) { return lruCache.get(key); } }; ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache); ImageListener listener = ImageLoader.getImageListener(img, R.drawable.ic_launcher, R.drawable.ic_launcher); imageLoader.get(url, listener); //下面代码无关 img.setVisibility(View.VISIBLE); } }
布局:
<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/get_json" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="get jsonObject" /> <Button android:id="@+id/get_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_marginTop="10dp" android:text="download Image" /> <ImageView android:id="@+id/img" android:layout_width="200dp" android:layout_height="200dp" android:src="@drawable/ic_launcher" android:visibility="gone" /> <Button android:id="@+id/net_work" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="NetworkImageView" /> <com.android.volley.toolbox.NetworkImageView android:id="@+id/net_work_img" android:layout_width="200dp" android:layout_height="200dp" /> </LinearLayout>