我希望检查用户是否喜欢发帖的好日子,在此answer解决方案无法正常运行。
我认为使用 AsyncTask 类编写新解决方案但也无法正常工作。 非常感谢大家。
class Check extends AsyncTask<String , Void , Void > {
private ImageView e;
Check(ImageView e)
{
this.e=e;
}
@Override
protected Void doInBackground(String... params) {
int id =Integer.parseInt(params[1]);
requestQueue = Volley.newRequestQueue(context);
requestQueue.start();
StringRequest request = new StringRequest(Request.Method.GET, params[0], new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response.equals("yes"))
{
e.setImageResource(R.mipmap.love_post);
e.setTag(R.mipmap.love_post);
} else {
e.setImageResource(R.mipmap.empty_heart);
e.setTag(R.mipmap.empty_heart);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Volley", "Error ");
}
});
return null;
}
}
答案 0 :(得分:0)
您无法在doInBackground()方法中更新UI视图。 doInBackground()在工作线程上运行而不在UI线程上运行。尝试更新onPostExecute()方法中的视图,如下所示,
class Check extends AsyncTask<String , Void , Void > {
private ImageView e;
Check(ImageView e){this.e=e;}
@Override
protected String doInBackground(String... params) {
int id =Integer.parseInt(params[1]);
String responseText = "";
requestQueue = Volley.newRequestQueue(context);
requestQueue.start();
StringRequest request = new StringRequest(Request.Method.GET, params[0], new Response.Listener<String>() {
@Override
public void onResponse(String response) {
responseText = response;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Volley", "Error ");
}
});
return responseText;
}
@Override
protected void onPostExecute(String response) {
if (response.equals("yes")){
e.setImageResource(R.mipmap.love_post);
e.setTag(R.mipmap.love_post);
} else {
e.setImageResource(R.mipmap.empty_heart);
e.setTag(R.mipmap.empty_heart);
}
}
}
答案 1 :(得分:0)
在AsyncTask
中,doInBackground
方法中的代码在workerThread上运行,而不是UI线程。
在volley requests queue
中使用AsyncTask
进行排球多余会自动将其请求范围扩展到后台的工作线程。
代码建议如下:
// 1.init volley request queue
// 2.construct a request
// 3.add the request to volley request queue
如果您想更改UI配置,您有两种方式:
一种方法是使用handler
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
// do something change ui
}
}
};
使用onResponse
的{{1}}方法:
StringRequest
另一种方式,调用Message message = Message.obtain();
message.what = 1; // define a integer to stand for some situation
handler.sendMessage(message);
onResponse runOnUiThread()' in you
StringRequest`:
method of