JSONフィードに含まれる値を1次元配列に読み込もうとしています.ShowProgress、Orange、Blue、およびTargetの値をProgressクラスの配列に格納する配列要素を使用しています。次に、これらを使用して進行状況バーを更新します (3 番目のコード セクションを参照)。これらの値を抽出できません (おそらく設定されていませんか?):
フィードは次のようになります (JSONlint を渡します)。
{
"ShowProgress": {
"ShowProgress": "TRUE",
"Orange": "0",
"Blue": "0",
"Target": "18"
}
}
このルーチンは、配列の値を正しく読み取れないように見える場所です。rem ステートメントは、疑わしい場所を示しています。
public class FetchProgress extends AsyncTask<OpportunityActivity, Void, ArrayList<String>> {
private OpportunityActivity opportunityActivity;
@Override
protected ArrayList doInBackground(OpportunityActivity... activity) {
// This may be incorrect - I don't want a two dimensional
// just a one dimensional array
opportunityActivity = activity[0];
ArrayList<Progress> progresses = new ArrayList<Progress>();
String readFeed = readFeed();
try {
JSONObject json = new JSONObject(readFeed);
JSONArray jsonArray = new JSONArray(json.optString("ShowProgress"));
Progress progress = new Progress();
progress.setTarget(jsonArray.optInt("Target"));
} catch (Exception e) {
e.printStackTrace();
}
このルーチンは JSON を読み取ります。
public String readFeed() {
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
SharedPreferences settings =
PreferenceManager.getDefaultSharedPreferences(opportunityActivity);
HttpGet httpGet = new HttpGet("https://www.webfeedurl.com/stuff.php");
try
{
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
int a=0;
while ((line = reader.readLine()) != null) {
builder.append(line);
a++;
}
} else {
Log.e(MainActivity.class.toString(), "Failed to download file");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
return builder.toString();
}
最後に OpportunityActivity に戻り、配列の値を使用して ProgressBar を設定します。
public void updateProgress(ArrayList<Progress> progress) {
ProgressBar progressHours = (ProgressBar)findViewById(R.id.progressHours);
// How do I get the array list variables out to set my progress bar....
// The next line is wrong
progressHours.setProgress(progress.getTarget());
}
クラスファイルは次のとおりです(ターゲット以外にも読み込もうとしている変数があるため、配列を使用しています)。
public class Progress {
private int target;
public int getTarget() {
return target;
}
public void setTarget(int target) {
this.target = target;
}
}