Volley XMLRequest GsonRequest 笔记
2016-07-26 10:44
330 查看
package com.moliying.a52_volley; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.LruCache; import android.view.View; import android.widget.ImageView; import com.android.volley.AuthFailureError; import com.android.volley.Request; 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.ImageRequest; import com.android.volley.toolbox.JsonObjectRequest; import com.android.volley.toolbox.NetworkImageView; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import org.json.JSONObject; import java.util.HashMap; import java.util.Map; public class MainActivity extends AppCompatActivity { private ImageView iv; private NetworkImageView networkImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.imageView); networkImageView = (NetworkImageView) findViewById(R.id.networkImageView); //创建一个请求对列 queue = Volley.newRequestQueue(this); } RequestQueue queue; public void netWorkImageViewClick(View view){ String path = "http://c.hiphotos.baidu.com/image/pic/item/3bf33a87e950352a3c2372a85043fbf2b3118bd4.jpg"; networkIma 4000 geView.setDefaultImageResId(R.mipmap.ic_launcher); networkImageView.setErrorImageResId(R.mipmap.ic_launcher); networkImageView.setImageUrl(path,new ImageLoader(queue,new BitmapCache())); } public void sendImageLoaderClick(View view){ String path = "http://c.hiphotos.baidu.com/image/pic/item/3bf33a87e950352a3c2372a85043fbf2b3118bd4.jpg"; ImageLoader loader = new ImageLoader(queue,new BitmapCache()); //参数:imageview,默认显示图片,加载失败显示的图片 ImageLoader.ImageListener listener = ImageLoader.getImageListener(iv,R.mipmap.ic_launcher,R.mipmap.ic_launcher); //发送请求 loader.get(path,listener,200,200); } //ImageCache class BitmapCache implements ImageLoader.ImageCache{ //LRU算法: 最近最少使用算法 private LruCache<String,Bitmap> cache;//使用LRU private int maxCache = 10*1024*1024; //10MB public BitmapCache(){ cache = new LruCache<>(maxCache); } //从缓存中获取图片 @Override public Bitmap getBitmap(String s) { System.out.println("getBitmap--"+s); return cache.get(s); } //把图片放到缓存中 @Override public void putBitmap(String s, Bitmap bitmap) { System.out.println("putBitmap--"+s); cache.put(s,bitmap); } } public void sendImageRequestClick(View v){ String path = "http://c.hiphotos.baidu.com/image/pic/item/3bf33a87e950352a3c2372a85043fbf2b3118bd4.jpg"; /** * 第一个参数就是图片的URL地址,这个没什么需要解释的。 第二个参数是图片请求成功的回调,这里我们把返回的Bitmap参数设置到ImageView中。 第三第四个参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,指定成0的话就表示不管图片有多大,都不会进行压缩。 第五个参数用于指定图片的颜色属性,Bitmap.Config下的几个常量都可以在这里使用,其中ARGB_8888可以展示最好的颜色属性,每个图片像素占据4个字节的大小,而RGB_565则表示每个图片像素占据2个字节大小。 第六个参数是图片请求失败的回调,这里我们当请求失败时在ImageView中显示一张默认图片。 */ ImageRequest request = new ImageRequest(path, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap bitmap) { iv.setImageBitmap(bitmap); } }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { System.out.println(volleyError); } }); queue.add(request); } /** * 发送JSON请求 * @param view */ public void sendJSONClick(View view){ // String path = "http://192.168.1.10:8080/51_Server/LoginServlet"; String path = "http://weather.123.duba.net/static/weather_info/101010100.html"; /** * 参数:请求方式,url,请求参数(JsonObject),响应的回调接口,错误的回调接口 */ JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, path, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject jsonObject) { System.out.println(jsonObject); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { System.out.println(volleyError); } }); queue.add(request); } /** * 使用StringRequest发送一个请求(字符串) * @param view */ public void sendStringClick(View view){ // stringRequestMethod1(); stringRequestMethod2(); } /** * 使用StringRequest发送一个带参数的Post请求 */ private void stringRequestMethod2(){ String path = "http://192.168.1.10:8080/51_Server/LoginServlet"; Response.Listener listener = new Response.Listener<String>() { @Override public void onResponse(String s) { System.out.println(s); } }; Response.ErrorListener errorListener = new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { System.out.println(volleyError); } }; StringRequest request = new StringRequest(Request.Method.POST,path,listener,errorListener){ @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String,String> params = new HashMap<>(); params.put("username","vince"); params.put("password","123"); return params; } }; queue.add(request); } /** * StringRequest没有参数的GET请求 */ private void stringRequestMethod1() { String path = "http://www.baidu.com"; StringRequest request = new StringRequest(Request.Method.GET, path, new Response.Listener<String>() { @Override public void onResponse(String s) { System.out.println(s); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { System.out.println(volleyError); } }); queue.add(request);//把请求对象添加到对队中 } }
package com.moliying.a52_volley; import android.util.Xml; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.toolbox.HttpHeaderParser; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.io.StringReader; import java.io.UnsupportedEncodingException; /** * 自定义XMLRequest */ public class XMLRequest extends Request<XmlPullParser>{ private final Response.Listener<XmlPullParser> mListener; public XMLRequest(int method, String url,Response.Listener<XmlPullParser> listener,Response.ErrorListener errorListener) { super(method, url, errorListener); this.mListener = listener; } @Override protected Response<XmlPullParser> parseNetworkResponse(NetworkResponse networkResponse) { try { String xmlString = new String(networkResponse.data,HttpHeaderParser.parseCharset(networkResponse.headers)); XmlPullParser pull = Xml.newPullParser(); pull.setInput(new StringReader(xmlString)); return Response.success(pull,HttpHeaderParser.parseCacheHeaders(networkResponse)); } catch (XmlPullParserException e) { e.printStackTrace(); return Response.error(new ParseError(e)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return Response.error(new ParseError(e)); } } @Override protected void deliverResponse(XmlPullParser xmlPullParser) { mListener.onResponse(xmlPullParser); } }
package com.moliying.a52_volley; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.toolbox.HttpHeaderParser; import com.google.gson.Gson; import java.io.UnsupportedEncodingException; /** * 自定义GsonRequest * @param <T> */ public class GsonRequest<T> extends Request<T> { private final Response.Listener<T> mListener; private Gson gson; private Class<T> mClass; public GsonRequest(int method, String url, Class<T> mClass, Response.Listener<T> mListener, Response.ErrorListener listener) { super(method, url, listener); this.mListener = mListener; this.mClass = mClass; } @Override protected Response<T> parseNetworkResponse(NetworkResponse networkResponse) { try { String jsonString = new String(networkResponse.data, HttpHeaderParser.parseCharset(networkResponse.headers)); return Response.success(gson.fromJson(jsonString, mClass), HttpHeaderParser.parseCacheHeaders(networkResponse)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return Response.error(new ParseError(e)); } } @Override protected void deliverResponse(T t) { mListener.onResponse(t); } }
清单文件权限
<uses-permission android:name="android.permission.INTERNET"/>
布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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: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="com.moliying.a52_volley.MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true" android:layout_alignParentTop="true"
android:onClick="sendStringClick" android:text="发送一个字符串请求"/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true" android:layout_below="@+id/button"
android:onClick="sendJSONClick" android:text="发送一个JSON请求"/>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/button2"
android:layout_alignParentStart="true" android:layout_below="@+id/button2"
android:onClick="sendImageRequestClick" android:text="发送一个图片请求"/>
<ImageView
android:id="@+id/imageView"
android:layout_width="200dp"
android:layout_height="200dp"
android:visibility="gone"
android:layout_alignParentStart="true"
android:layout_below="@+id/button5" android:scaleType="center"/>
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/button3"
android:layout_alignParentStart="true" android:layout_below="@+id/button3"
android:onClick="sendImageLoaderClick" android:text="使用ImageLoader加载图片"/>
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@+id/button4" android:text="networkImageView加载图片"
android:onClick="netWorkImageViewClick"
android:layout_alignEnd="@+id/button4"/>
<com.android.volley.toolbox.NetworkImageView android:layout_width="200dp"
android:layout_height="200dp"
android:id="@+id/networkImageView"
android:layout_below="@+id/imageView"
android:layout_gravity="center_horizontal"/>
</RelativeLayout>
相关文章推荐
- Java Runtime.exec() Android ProcessBuilder 输出流阻塞
- Key-Value Observing机制
- jquey版本问题
- String 和StringBuffer,StringBuilder的区别
- POJ-2524-Ubiquitous Religions
- mosquitto源码分析(一)
- 五十个UI设计资源网站
- POJ 1458 Common Subsequence [DP.LIS]
- 62. Unique Paths
- android mosquitto客户端使用SSL功能的具体操作总结(android mqtt ssl 加密)
- Page directive: illegal to have multiple occurrences of contentType with different values (old: text
- Postgresql uuid,pgtrashcan,pldebugger install
- iOS: 如何调节UITabbarItem的图片和文字位置
- ReflectionToStringBuilder的使用分析与优化
- JMeter Installation Guide
- 【转】Android Gradle 编译错误Java finished with non-zero exit value 2
- LeetCode—376. Wiggle Subsequence
- [JS] JS模块化开发之RequireJS
- 转一篇简洁的UIView动画编程方法
- HDU1159 Common Subsequence (LCS)