AsyncTask返回变量无法解析

时间:2012-10-22 05:47:25

标签: android arraylist android-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());
}

2 个答案:

答案 0 :(得分: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的答案。

答案 1 :(得分:0)

感谢Andro(他将获得更多声誉)。

我终于使用这个循环访问了数组中的值(这似乎是不必要的),但它最终得到了这个一维数组中的元素:

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

我欢迎评论是否有必要添加第二个维度。