[英]Perform something only after completing doInBackground in AsyncTask
在我AsyncTask
我里面相當長的操作doInBackground()
其完成后的值賦給變量doInBackground()
我使用該變量的值在postExecute()
設置用戶界面的一部分。 問題在於doinbackground()
是一個很長的操作, postExecute()
首先完成。 這樣我就無法獲得價值。
這是問題所在
private class bigwork extends AsyncTask<String, Void, Boolean> {
String foo = null;
@Override
protected void onPreExecute() {
}
@Override
protected Boolean doInBackground(final String... args) {
// Long operation sets variable 'foo' a new value
}
@Override
protected void onPostExecute(final Boolean success) {
// Make use of foo here
}
問題是我在postExecute()
獲取的foo
的值仍然為null
。
通常,您會將字符串直接傳遞給onPostExecute:
private class bigwork extends AsyncTask<String, Void, String>
{
@Override
protected void onPreExecute() {
}
@Override
protected Boolean doInBackground(final String... args) {
// Long operation
set variable 'foo' a new value
return foo;
}
@Override
protected void onPostExecute(String foo) {
if (foo != null) {
// success
}
// Make use of foo here
}
您應該將參數直接傳遞給onPostExecute。 引用《 Android開發人員參考》 :
protected void onPostExecute(結果結果)在doInBackground(Params ...)之后在UI線程上運行。 指定的結果是doInBackground(Params ...)返回的值。
如果需要傳遞多個參數,可以將它們包裝在一個類中,例如:
public class MyClass
{
public String string1;
public String string2;
public MyClass(String a, String b){
string1 = a;
string2 = b;
}
}
希望這可以幫助。
最好的祝福。
在doInBackground()函數完成之后,重寫onPostExecute()函數以執行某些任務。
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
ServiceHandler sh = new ServiceHandler();
jsonStr=sh.makeServiceCall(arg0[0], ServiceHandler.GET);
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.i("jsin", jsonStr);
if(pd.isShowing()){
pd.dismiss();
}
try {
js = new JSONObject(jsonStr);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JSONArray results =null;
try {
results = js.getJSONArray("results");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i = 0; i< results.length();i++)
{
JSONObject c = null;
try {
c = results.getJSONObject(i);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
placeName = c.getString(TAG_NAME);
ratings = c.getDouble(TAG_RATING);
HashMap<String, String> rest = new HashMap<String, String>();
rest.put(TAG_NAME, placeName);
rest.put(TAG_RATING, ratings+"");
placeList.add(rest);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ListAdapter adapter = new SimpleAdapter(getActivity().getApplicationContext(), placeList, R.layout.list_item, new String[]{TAG_NAME}, new int[]{R.id.list_text});
lv.setAdapter(adapter);
}
我在doInBackground中發出http請求,成功回復后,我在onPostExecute()中解析json並顯示在列表視圖中,顯然此代碼在擴展AsyncTask類的類中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.