0

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;
}

}

4

0 に答える 0