这个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 :(得分: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());
}
我欢迎评论是否有必要添加第二个维度。