2016-04-24 15 views
0

私は学校用の小さなプロジェクトに取り組んでいます。このプロジェクトでは、jsonにエンコードされたデータベースからデータを解析する必要があります。今私は1つだけのオブジェクトをエンコードするためには成功しているが、すべてが取得されているわけではありません。whileループからのjsonデータの解析

Response.Listener<String> responseListener2 = new Response.Listener<String>() { 
@Override 
public void onResponse(String response) { 
    try { 
     JSONObject jsonObject2 = new JSONObject(response); 
     Log.i("HIAAAAAAAAAAAAAA", response); 
     boolean tweet_success = jsonObject2.getBoolean("tweet_succes"); 
     String tweet_sendbyuser = jsonObject2.getString("tweet_send_by_user"); 
     String tweet_description = jsonObject2.getString("tweet_description"); 
     String tweet_favourites = jsonObject2.getString("tweet_favourites"); 
     String tweet_retweets = jsonObject2.getString("tweet_retweets"); 
     String tweet_reactions = jsonObject2.getString("tweet_reactions"); 
     boolean tweet_isReaction = jsonObject2.getBoolean("tweet_isReaction"); 
     String tweet_reactedTo = jsonObject2.getString("tweet_reactedTo"); 
     String tweet_dateSend = jsonObject2.getString("tweet_dateSend"); 
     Tweet tweet = new Tweet(tweet_sendbyuser, tweet_description, tweet_favourites, tweet_retweets, tweet_reactions, tweet_isReaction, tweet_reactedTo); 
     LoggedInDetails.getInstance().addTweet(tweet); 
     if (tweet_success) { 
      Toast.makeText(LoginActivity.this, "Parsing done", Toast.LENGTH_SHORT).show(); 
      Intent intent = new Intent(getApplicationContext(), HomeActivity.class); 
      intent.putExtra("username", LoggedInDetails.getInstance().getUsername()); 
      intent.putExtra("password", LoggedInDetails.getInstance().getPassword()); 
      startActivity(intent); 
     } else { 
      Toast.makeText(LoginActivity.this, "Error during parsing", Toast.LENGTH_SHORT).show(); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
     Log.i("", response); 
    } 
}}; 

次に返さ私は、それはすべてのデータを解析持つように作られたコードがあります:

コードは、1つのオブジェクトを転送します。しかし何これが行うことは何行秒かで何もしていない、まだ最初の行から11個の別々のオブジェクトを作成し、次のとおりです。

Response.Listener<String> responseListener2 = new Response.Listener<String>() { 
@Override 
public void onResponse(String response) { 
    try { 
     JSONObject jObject = new JSONObject(response.trim()); 
     Iterator<?> keys = jObject.keys(); 
     boolean tweet_success = false; 
     while (keys.hasNext()) { 
      String key = (String) keys.next(); 
      Log.i("HIAAAAAAAAAAAAAA", response); 
      tweet_success = jObject.getBoolean("tweet_succes"); 
      String tweet_sendbyuser = jObject.getString("tweet_send_by_user"); 
      String tweet_description = jObject.getString("tweet_description"); 
      String tweet_favourites = jObject.getString("tweet_favourites"); 
      String tweet_retweets = jObject.getString("tweet_retweets"); 
      String tweet_reactions = jObject.getString("tweet_reactions"); 
      boolean tweet_isReaction = jObject.getBoolean("tweet_isReaction"); 
      String tweet_reactedTo = jObject.getString("tweet_reactedTo"); 
      String tweet_dateSend = jObject.getString("tweet_dateSend"); 
      Tweet tweet = new Tweet(tweet_sendbyuser, tweet_description, tweet_favourites, tweet_retweets, tweet_reactions, tweet_isReaction, tweet_reactedTo); 
      LoggedInDetails.getInstance().addTweet(tweet); 

     }if (tweet_success) { 
      Toast.makeText(LoginActivity.this, "Parsing done", Toast.LENGTH_SHORT).show(); 
      Intent intent = new Intent(getApplicationContext(), HomeActivity.class); 
      intent.putExtra("username", LoggedInDetails.getInstance().getUsername()); 
      intent.putExtra("password", LoggedInDetails.getInstance().getPassword()); 
      startActivity(intent); 
     } else { 
      Toast.makeText(LoginActivity.this, "Error during parsing", Toast.LENGTH_SHORT).show(); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
     Log.i("", response); 
    } 
}}; 

はその後、私のcollect_tweet.php(唯一の重要な部分)

if($fetch_tweets->execute()){ 
     $response1 = array(); 
     $response1["tweet_succes"] = false; 
     while($row = $fetch_tweets->fetch(PDO::FETCH_ASSOC)){ 
      $response1["tweet_succes"] = true; 
      $response1["succes"] = true; 
      $response1["tweet_id"] = $row["tweet_id"]; 
      $response1["tweet_send_by_user"] = $row['tweet_sendbyuser']; 
      $response1["tweet_description"] = $row['tweet_description']; 
      $response1["tweet_favourites"] = $row['tweet_favourites']; 
      $response1["tweet_retweets"] = $row['tweet_retweets']; 
      $response1["tweet_reactions"] = $row['tweet_reactions']; 
      $response1["tweet_isReaction"] = $row['tweet_isReaction']; 
      $response1["tweet_reactedTo"] = $row['tweet_reactedTo']; 
      $response1["tweet_dateSend"] = $row['tweet_dateSend']; 
      echo json_encode($response1); 
     } 
    }else{ 
     $response1["tweet_succes"] = false; 
     echo json_encode($response1); 
    } 
あり現在、ブラウザになっイムJSONの

パート:(ダミーのテストデータ)

{ 
    "tweet_succes":true, 
    "succes":true, 
    "tweet_id":"1", 
    "tweet_send_by_user":"1", 
    "tweet_description":"Ja ik weet niet zo goed wat de eerste tweet moest zijn, dus dit is em maar he", 
    "tweet_favourites":"2, 3, 4", 
    "tweet_retweets":"2, 3, 4", 
    "tweet_reactions":"", 
    "tweet_isReaction":"false", 
    "tweet_reactedTo":"-1", 
    "tweet_dateSend":"2016-04-23 23:39:49" 
} 
{ 
    "tweet_succes":true, 
    "succes":true, 
    "tweet_id":"2", 
    "tweet_send_by_user":"2", 
    "tweet_description":"Ja ik weet niet zo goed wat de eerste tweet moest zijn, dus dit is em maar he", 
    "tweet_favourites":"2, 3, 4", 
    "tweet_retweets":"2, 3, 4", 
    "tweet_reactions":"", 
    "tweet_isReaction":"false", 
    "tweet_reactedTo":"-1", 
    "tweet_dateSend":"2016-04-23 23:40:49" 
} 

私はおそらくそれは間違って解析していますか私の代わりに、オブジェクトのJSONArrayを使用する必要があります。

私の目的は、受信しているデータに基づいてつぶやくことです。事前に

感謝〜

答えて

0

あなたは、複数の単一の配列を返す代わりに、配列の配列を構築し、一度にすべてを返却しています。これはまた、あなたが唯一の選択のこれらのフィールドなしその他を照会ならば、あなたは

$response1 = array(); 
$response1["tweet_succes"] = false; 
if($fetch_tweets->execute()){ 
    $response1["tweet_succes"] = true; 
    $response1['results'] = $fetch_tweets->fetchAll(PDO::FETCH_ASSOC)){ 
}else{ 
    $response1["tweet_succes"] = false; 
} 

echo json_encode($response1); // finally return the complete array 
を書くことができ、さらに簡単に行うことができる1件の返信に

$response1 = array(); 
$response1["tweet_succes"] = false; 
if($fetch_tweets->execute()){ 
    $response1["tweet_succes"] = true; 
    $response1["succes"] = true; 

    while($row = $fetch_tweets->fetch(PDO::FETCH_ASSOC)){ 
     $t = array(); 
     $t["tweet_id"] = $row["tweet_id"]; 
     $t["tweet_send_by_user"] = $row['tweet_sendbyuser']; 
     $t["tweet_description"] = $row['tweet_description']; 
     $t["tweet_favourites"] = $row['tweet_favourites']; 
     $t["tweet_retweets"] = $row['tweet_retweets']; 
     $t["tweet_reactions"] = $row['tweet_reactions']; 
     $t["tweet_isReaction"] = $row['tweet_isReaction']; 
     $t["tweet_reactedTo"] = $row['tweet_reactedTo']; 
     $t["tweet_dateSend"] = $row['tweet_dateSend']; 
     $response1[] = $t; 
    } 
}else{ 
    $response1["tweet_succes"] = false; 
} 

echo json_encode($response1); // finally return the complete array 

を、すべてのデータを構築します