2012-10-22 74 views
0

這個AsyncTask代碼有什麼問題阻止它返回一個數組進度......我在指定的行上得到「進度無法解析爲變量」。AsyncTask返回變量無法解析

public class FetchProgress extends AsyncTask<OpportunityActivity, Void, ArrayList<Progress>> { 
private OpportunityActivity opportunityActivity; 

@Override 
protected ArrayList<Progress> doInBackground(OpportunityActivity... activity) { 
    opportunityActivity = activity[0];    
    String readFeed = readFeed(); 
    // this JSON feed is delivered correctly 

    try {  
     JSONObject json = new JSONObject(readFeed);     
     JSONObject jsonObject = new JSONObject(json.optString("ShowProgress")); 

      Progress progress = new Progress(); 
      progress.setShowProgress(jsonObject.getBoolean("ShowProgress")); 
      progress.setTarget(jsonObject.getInt("Target")); 

    // the above values are set correctly and appear if I use Log    

    } catch (Exception e) {  
     e.printStackTrace(); 
    } 
    // HERE'S THE ISSUE: 
    // Eclipse reports "progress cannot be resolved to a variable" 
    return progress; 
} 

這裏的OnPostExecute:

public void onPostExecute(ArrayList<Progress> progress) { 
    opportunityActivity.updateProgress(progress); 
} 

這裏的類:

public class Progress { 
private boolean showprogress; 
private int target; 

public boolean getShowProgress() { 
    return showprogress; 
} 
public void setShowProgress(boolean showprogress) { 
    this.showprogress = showprogress; 
} 

public int getTarget() { 
    return target; 
} 

public void setTarget(int target) { 
    this.target = target; 
} 
} 

這裏的onPostExecute:

public void onPostExecute(ArrayList<Progress> progress) { 
    opportunityActivity.updateProgress(progress); 
} 

而且該方法將觸發在那裏我可以不訪問傳遞的ArrayList:

public void updateProgress(ArrayList<Progress> progress) {  
    progress_text = (TextView)findViewById(R.id.progress_text);   
    progress_text.setText("Target: " + progress.getTarget()); 
} 
+0

您應該首先了解Java的基礎知識:http://mindprod.com/jgloss/scope.html –

回答

2

剪切此行,

Progress progress = new Progress(); 

,並貼出來try語句。

ArrayList<Progress> progressArray=new ArrayList(); 

    Progress progress = new Progress(); 

try {  
     JSONObject json = new JSONObject(readFeed);     
     JSONObject jsonObject = new JSONObject(json.optString("ShowProgress")); 


      progress.setShowProgress(jsonObject.getBoolean("ShowProgress")); 
      progress.setTarget(jsonObject.getInt("Target")); 
     progressArray.add(progress); 
    // the above values are set correctly and appear if I use Log    

    } catch (Exception e) {  
     e.printStackTrace(); 
    } 
    return progressArray; 

由於您已經在try Catch中聲明並初始化了它,所以它對您的方法不可見。

編輯

但還是因爲它僅僅是一個你正在試圖返回類的對象,但而貴的方法將期望返回類型的ArrayList的那就大錯特錯了。所以我編輯了我的答案,你應該如何返回一個ArrayList。

+0

如果我在try語句之外移動「Progress progress = new Progress();'行,那麼我會得到新錯誤「Type mismatch:can not convert from Progress to ArrayList 」for my'return progress';線。 – rihallix

+0

檢查我更新的答案。 –

+0

謝謝 - 現在數組沒有傳遞給onPostExecute和最終的方法,它就此作用(請參閱更新後的代碼)。 如何正確傳輸然後訪問傳遞的數組變量。 – rihallix

0

感謝安德羅(誰將獲得額外的聲譽)。

我最終要訪問使用該循環(這似乎不用)數組中的值,但它終於脫離了這個一個維數組的元素:

for (Progress i : progress) 
    progress_text.setText(i.getOrange() + "/" + i.getTarget() + " hours");   
    progressHours.setMax(i.getTarget()); 
    progressHours.setProgress(i.getOrange());   
    } 

我希望能就是否加入本次評論尺寸是必要的。