【发布时间】:2015-10-10 16:13:06
【问题描述】:
我有一个新闻应用程序,我可以在其中获取几个 XML 和 API 并立即插入数据库。我在获取/插入数据库过程中使用 AsyncTask。但是我仍然收到一个块(UI 没有响应)
for (int i = 0; i < urls.size(); i++) {
MyAsyncTask myAsyncTask = new MyAsyncTask(urls.get(i));
myAsyncTask.execute();
}
AsyncTask 类:
private class MyAsyncTask extends AsyncTask<Void,Void,Void> {
Url mUrl;
public MyAsyncTask(Url url){
this.mUrl = url;
}
@Override
protected Void doInBackground(Void... params) {
connect(mUrl.getUrl(),mUrl.getSourceName(),mUrl.getChoice(),mUrl.getId());
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
whenToInflate[mUrl.getId()] = true;
mProgressState += 15;
mProgress.setProgress(mProgressState);
if (areAllTrue(whenToInflate)) {
inflate(1907);
Arrays.fill(whenToInflate, false);
}
}
}
连接方法:
private void connect(String url, final String sourceSite, final int sourceChoice, final int i) {
stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
if (sourceChoice == 14) {
database.insertFixtures(response, "FOOTBALL");
} else if (sourceChoice == 10 || sourceChoice == 20) {
database.insertNews(response, sourceChoice);
} else {
if (sourceChoice == 1) response = URLDecoder.decode(URLEncoder.encode(response, "iso8859-1"), "UTF-8");
database.insertNewsXML(response, sourceSite, sourceChoice);
}
} catch (IllegalStateException | IllegalArgumentException | UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
VolleySingleton.getInstance(getActivity()).addToRequestQueue(stringRequest);
}
VolleySingleton 类:
public class VolleySingleton {
private static VolleySingleton instance;
private static VolleySingleton ourInstance = new VolleySingleton();
private RequestQueue requestQueue;
private VolleySingleton() {
}
private VolleySingleton(Context context) {
requestQueue = Volley.newRequestQueue(context);
}
public static VolleySingleton getInstance() {
return ourInstance;
}
public static VolleySingleton getInstance(Context context) {
if (instance == null) {
instance = new VolleySingleton(context);
}
return instance;
}
public RequestQueue getRequestQueue() {
return requestQueue;
}
public <T> void addToRequestQueue(Request<T> req) {
req.setTag("App");
getRequestQueue().add(req);
}
}
【问题讨论】:
-
请向我们展示
StringRequest的课程以及您如何管理VolleySingleton -
添加了 VolleySingleton 并且 StringRequest 是一个使用 Android Volley Libarary(mcxiaoke.volley:library) 的对象
标签: android android-asynctask android-volley