我有它在我的MainActivity
类与ListView
相关的,当我按清单(setOnItemClickListener
法)的项目之一,我执行AsyncTask
来检索数据库中的信息自定义适配器并将其发送到bundle
。同步不同步
因此,我必须等到AsyncTask
完成才能发送在bundle
中检索到的信息。
为此,我创建了一个interface
:
public interface OnCarListener {
void onCarCompleted(String c);
void onCarError(String error);
}
我有我的AsyncTask
在另一大类:
class findCar extends AsyncTask<Integer, Integer, String> {
private final OnCarListener mListener;
public findCar(OnCarListener listener)
{
mListener = listener;
}
protected void onPreExecute() {
}
protected String doInBackground(Integer... idCar) {
String nameCar = "";
//Here the code to retrive the info
nameCar = obj.getString("name");
//Now nameCar = "Car1"
} catch (Exception ex) {
}
return nameCar;
}
protected void onProgressUpdate() {
}
protected void onPostExecute(String c) {
if (mListener != null) {
mListener.onCarCompleted(c);
}
}
}
我执行我AsyncTask
(在我MainActivity
)如下:
new findCar(new OnCarListener()
{
@Override
public void onCarCompleted(String c) {
synchronized (c)
{
name = c;
}
}
@Override
public void onCarError(String error) {
}
}).execute(idCar);
而且执行后纳克AsyncTask
我扔包:
bundle.putString("name", name);
注:我与bundle
发送的详细信息,但我忽略它简化问题。
应该在我看来,工作,但在List
的name
的一个元素第一次点击是不是由bundle
只是在第二和点击其余我在相同或发过去了,在List
的其余元素中,它起作用。
预期的结果:AsyncTask
将被执行,直到它完成代码的其余部分不应该工作。很明显,这不是它现在正在做的事情。
我想知道的是:为什么在第一次迭代中不起作用?我的意思是,当我有List
时,我点击List
其中一个元素显示的元素信息(在另一个Activity中),但值name
未显示。
如果我回去,并且我在List
的同一元素(或不同的元素)上做了一次或多次点击,它们全都正确显示值name
。
为什么在第一次迭代中它不起作用?
而且我还有一个问题:为什么如果我退出为adelphus
他回答说,任何我点击List
价值name
出现的元素的时代?
我试过这个问题的解决方案:synchronized not synchronizing但仍然无法正常工作。
我该怎么办?(不改变程序的逻辑)
在此先感谢!
现在,任何时代的我按在列表中的元素它存储在包中的值“name”。 –
根据你的回答,我尝试同步我的'bundle',因为它似乎试图在它发送的包中插入新的值,但我得到的错误与你的情况相同。任何时间发送的名称。 –
您的问题是要解决在第一个项目被点击时将值放入包** ** - 这就是代码的作用。是的,它也会替换名称,只要你点击一个项目 - 但我不知道你是如何使用你的包,或你在哪里/如何发送它。 – adelphus