我有一些麻烦找到关于Volley和response.Listener的一些信息.
基本上我有一个向后端询问数据的操作,在后台调用Volley(由Volley本身处理),同时在主线程上调用onResponse.
我是否需要自己运行才能在后台处理这些数据,或者有办法强制onResponse在后台运行?
谢谢.
编辑:
这是我正在运行的代码.
private Response.Listener<String> volleyResp = new Response.Listener<String>() { @override public void onResponse(final String jsonResp) { new Thread() { public void run() { // Do something ... Insert in DB for example. } }.start(); }
解决方法
请仔细阅读我的回复
如果要在与请求相同的线程中“处理”数据,则应该具有Request(或JsonRequest)的子类并实现parseNetworkResponse(NetworkResponse响应)
示例:
public class TotoRequest extends JsonRequest { @Override protected Response parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data,HttpHeaderParser.parseCharset(response.headers)); JSONObject jsonObject = new JSONObject(jsonString); // Process data here } catch (UnsupportedEncodingException | JSONException e) { return Response.error(new ParseError(e)); } } }
这是对你问题的回复,但我认为这不是你真正想要的.
如果您的数据很小,那么在主线程中处理数据可能更安全.
如果您的数据很重要,或者您想在数据库中插入/更新它,您应该继续执行您正在执行的操作.
另外,我建议你使用AsyncTask而不是线程.