我有它在我的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