2016-08-13 13 views
1
アンドロイド

内のすべてのJSONの値を表示することが完全に実行されますが、今、私はテキストビューでJSON値のすべてを表示したいと思います。私はJSONの初心者で、アンドロイドの経験が少ししかありません。私は現在、このチュートリアル<a href="http://www.android-examples.com/android-json-parsing-retrieve-from-url-and-set-mysql-db-data/" rel="nofollow">http://www.android-examples.com/android-json-parsing-retrieve-from-url-and-set-mysql-db-data/</a></p> <p>を勉強していますか

ここに私のMainActivity.javaがあります。

public class MainActivity extends Activity { 

TextView textview; 
JSONObject json = null; 
String str = ""; 
HttpResponse response; 
Context context; 
ProgressBar progressbar; 
Button button; 
JSONArray jArray; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    progressbar = (ProgressBar)findViewById(R.id.progressBar1); 
    textview = (TextView)findViewById(R.id.textView1); 
    button = (Button)findViewById(R.id.button1); 

    progressbar.setVisibility(View.GONE); 

    button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      progressbar.setVisibility(View.VISIBLE); 

      new GetTextViewData(context).execute(); 

     } 
    }); 
} 

public static Map<String,String> parse(JSONObject json , Map<String,String> out) throws JSONException{ 
    Iterator<String> keys = json.keys(); 
    while(keys.hasNext()){ 
     String key = keys.next(); 
     String val = null; 
     try{ 
      JSONObject value = json.getJSONObject(key); 
      parse(value,out); 
     }catch(Exception e){ 
      val = json.getString(key); 
     } 

     if(val != null){ 
      out.put(key,val); 
     } 
    } 
    return out; 
} 

private class GetTextViewData extends AsyncTask<Void, Void, Void> 
{ 
    public Context context; 

    public GetTextViewData(Context context) 
    { 
     this.context = context; 
    } 

    @Override 
    protected void onPreExecute() 
    { 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) 
    { 

     HttpClient myClient = new DefaultHttpClient(); 
     HttpPost myConnection = new HttpPost("http://192.168.1.9:80/test-androidex/send-data.php"); 

     try { 
      response = myClient.execute(myConnection); 
      str = EntityUtils.toString(response.getEntity(), "UTF-8"); 

     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


     try{ 
      JSONArray jArray = new JSONArray(str); 
      json = jArray.getJSONObject(0); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     catch (Exception e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 
    protected void onPostExecute(Void result) 
    { 

    try { 
      textview.setText(json.getString("name")); 

     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     progressbar.setVisibility(View.GONE); 

    } 
} 

これは私のJSONです。チュートリアルとはまったく異なります

[{"id": "1"、 "name": "white"、 "status": "0"}、{"id": "2" "名前": "赤"、 "ステータス": "10"}、{"id": "5"、 "名前": "青"、 "ステータス": "15"}

So明らかに私のコードは最初の名前 "白"だけを表示します。すべての値を表示するためにJSONObjectを反復する方法を理解できません。私は他の質問で答えを試みたが、私はそれらを私のコードに組み込むことはできない。

答えて

1

これは、ちょうどJSONArrayの最初の要素を取得しているためです。 (インデックス0)

JSONObjectをすべてアレイ内に収めるには、JSONArrayを繰り返してください。このよう

、JSONの解析とインサートの

JSONArray jArray = new JSONArray(str); 
int total=jArray.length(); 
for(int i=0;i<total;i++) { 
    JSONObject json = jArray.getJSONObject(i); // Replace 0 with i'th index. 
    // use this json object to iterate over individual objects. 
} 
0

Hereの例、更新、ソースを使用してサーバーからデータを削除するか、または取得あなたはこれを試してみてください!

ハッピーコーディング!

0

あなたのコードの問題は、Alok Patelが述べたものです。しかし、あなたのコードのロジックは、(あなたが投稿したサンプルjsonによると)あなたが望むことをするためにいくつかの変更が必要であることがわかります。 jsonObjectsで呼び出す必要がある間に、実際には単純なデータである値に対してparseメソッドを呼び出しました。私はあなたがやりたいように以下のコードをリファクタリング

public class MainActivity extends Activity { 

TextView textview; 
JSONObject json = null; 
String str = ""; 
HttpResponse response; 
Context context; 
ProgressBar progressbar; 
Button button; 
JSONArray jArray; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    progressbar = (ProgressBar)findViewById(R.id.progressBar1); 
    textview = (TextView)findViewById(R.id.textView1); 
    button = (Button)findViewById(R.id.button1); 

    progressbar.setVisibility(View.GONE); 

    button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      progressbar.setVisibility(View.VISIBLE); 

      new GetTextViewData(context).execute(); 

     } 
    }); 
} 



private class GetTextViewData extends AsyncTask<Void, Void, Void> 
{ 
    public Context context; 
    Map<String,String> out = new Map<String, String>(); 

    public GetTextViewData(Context context) 
    { 
     this.context = context; 
    } 

    @Override 
    protected void onPreExecute() 
    { 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) 
    { 

     HttpClient myClient = new DefaultHttpClient(); 
     HttpPost myConnection = new HttpPost("http://192.168.1.9:80/test-androidex/send-data.php"); 

     try { 
      response = myClient.execute(myConnection); 
      str = EntityUtils.toString(response.getEntity(), "UTF-8"); 

     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


     try{ 
      JSONArray jArray = new JSONArray(str); 
      int total=jArray.length(); 

      for(int i=0;i<total;i++) { 
       JSONObject json = jArray.getJSONObject(i); 
       parse(json, out); 
      } 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     catch (Exception e) 
     { 

      e.printStackTrace(); 
     } 
     return null; 
    } 
    protected void onPostExecute(Void result) 
    { 

    try { 
     // print "out" object to console here by iterating over its keys 
     // or do any needed process on it here. 
      textview.setText(json.getString("name")); 

     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     progressbar.setVisibility(View.GONE); 

    } 
Map<String,String> parse(JSONObject json , Map<String,String> out) throws JSONException{ 
    Iterator<String> keys = json.keys(); 
    while(keys.hasNext()){ 
     String key = keys.next(); 
     String val = null; 
     try{ 
      val = json.getString(key); 
     }catch(Exception e){ 

     } 

     if(val != null){ 
      out.put(key,val); 
     } 
    } 
    return out; 
} 
} 
関連する問題

 関連する問題