}
}, new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
Log.e(“TAG”, error.getMessage(), error);
}
});
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(“http://m.weather.com.cn/data/101010100.html”,
null, new Response.Listener()
{
@Override
public void onResponse(JSONObject response)
{
Log.e(“TAG”, response.toString());
}
}, new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
Log.e(“TAG”, error.getMessage(), error);
}
});
ImageRequest imageRequest = new ImageRequest(“http://imgt6.bdstatic.com/it/u=2,887966933&fm=19&gp=0.jpg”,
new Response.Listener()
{
@Override
public void onResponse(Bitmap response)
{
mImageView.setImageBitmap(response);
}
}, 0, 0, Config.RGB_565, null);
newRequestQueue.add(stringRequest);
newRequestQueue.add(imageRequest);
newRequestQueue.add(jsonObjectRequest);
基本都是new一个请求,加入请求队列就行了。
好了,下面进入正题,如何自定义自己的Request,其实很简单,咱们打开StringRequest的源码:
public StringRequest(int method, String url, Listener listener,
ErrorListener errorListener) {
super(method, url, errorListener);
mListener = listener;
}
构造方法中指明访问的url,method,和回调的接口,毕竟我们要处理数据么。
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
String parsed;
try {
parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
} catch (UnsupportedEncodingException e) {
parsed = new String(response.data);
}
return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
}
最终给我们返回的数据就是parsed,比如我们返回的是json字符串,我们就可以在这添几行代码,把字符串转换成对象返回。(很重要的是,返回类型是咱们声明Request的时候定的,是个泛型)。
下面直接上例子:
例子是,通过客户端访问服务器,服务器对客户端进行身份校验后,返回JSON字符串,客户端直接拿到对象。
1、对象:
package com.zhy.velloydemo;
public class User
{
private String name;
private int age;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
@Override
public String toString()
{
return “User [name=” + name + “, age=” + age + “]”;
}
}
2、自定义的Request
package com.zhy.velloydemo;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
public class JsonRequestWithAuth extends Request
{
private final Gson gson = new Gson();
private final Class clazz;
private final Listener listener;
private static Map<String, String> mHeader = new HashMap<String, String>();
/**
- 设置访问自己服务器时必须传递的参数,密钥等
*/
static
{
mHeader.put(“APP-Key”, “LBS-AAA”);
mHeader.put(“APP-Secret”, “ad12msa234das232in”);
}
/**
-
@param url
-
@param clazz
-
我们最终的转化类型
-
@param headers
-
请求附带的头信息
-
@param listener
-
@param appendHeader
-
附加头数据
-
@param errorListener
*/
public JsonRequestWithAuth(String url, Class clazz, Listener listener, Map<String, String> appendHeader,
ErrorListener errorListener)
{
super(Method.GET, url, errorListener);
this.clazz = clazz;
this.listener = listener;
mHeader.putAll(appendHeader);
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError
{
// 默认返回 return Collections.emptyMap();
return mHeader;
}
@Override
protected void deliverResponse(T response)
{
listener.onResponse(response);
}
@Override
protected Response parseNetworkResponse(NetworkResponse response)
{
try
{
/**
- 得到返回的数据
*/
String jsonStr = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
/**
- 转化成对象
*/
return Response.success(gson.fromJson(jsonStr, clazz), HttpHeaderParser.parseCacheHeaders(response));
Android开发除了flutter还有什么是必须掌握的吗?
相信大多数从事Android开发的朋友们越来越发现,找工作越来越难了,面试的要求越来越高了
除了基础扎实的java知识,数据结构算法,设计模式还要求会底层源码,NDK技术,性能调优,还有会些小程序和跨平台,比如说flutter,以思维脑图的方式展示在下图;
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
的吗?
相信大多数从事Android开发的朋友们越来越发现,找工作越来越难了,面试的要求越来越高了
除了基础扎实的java知识,数据结构算法,设计模式还要求会底层源码,NDK技术,性能调优,还有会些小程序和跨平台,比如说flutter,以思维脑图的方式展示在下图;
[外链图片转存中…(img-DKW8ywwh-1714299023497)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!