2016-06-23 14 views
1

オブジェクトの代わりにデータの配列を返すはずのPHPスクリプトを使用して、ローカルサーバーからデータを取得したいとします。配列の代わりにJSオブジェクトを返すPHPスクリプト

そして私は、Androidでボレーライブラリを使用してデータがリストビューでそれらを表示するために取得するには、このJavaScript配列を使用したいので、これはPHPスクリプトです:

<?php error_reporting(0); include("db_config.php"); 

// array for JSON response $response = array(); 

// get all items from myorder table $result = mysql_query("SELECT * FROM free_lancer") 
                 or die(mysql_error()); 

if (mysql_num_rows($result) > 0) { 

    $response["orders"] = array(); 

    while ($row = mysql_fetch_array($result)) { 
      // temp user array 
      $item = array(); 
      $item["ID_FL"] = $row["ID_FL"]; 
      $item["FL_LOGIN"] = $row["FL_LOGIN"]; 

      // push ordered items into response array 
      array_push($response["orders"], $item); 
      } 
     // success 
    // $response["success"] = 1; } else { 
    // order is empty 
     $response["success"] = 0; 
     $response["message"] = "No Items Found"; } // echoing JSON response echo json_encode($response); 

?> 

そして、これが置いてある:

{ 

    "orders":[ 
     { 
      "ID_FL":"1", 
      "FL_LOGIN":"log" 
     }, 
     { 
      "ID_FL":"7", 
      "FL_LOGIN":"L" 
     } 
    ] 

} 

そして、これは私の活動のコードです:

private static final String url = "http://192.168.1.5/apps.php"; 
    private ProgressDialog pDialog; 
    private List<Movie> movieList = new ArrayList<Movie>(); 
    private ListView listView; 
    private CustomListAdapter adapter; 

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

     listView = (ListView) findViewById(R.id.list); 
     adapter = new CustomListAdapter(this, movieList); 
     listView.setAdapter(adapter); 

     pDialog = new ProgressDialog(this); 
     // Showing progress dialog before making http request 
     pDialog.setMessage("Loading..."); 
     pDialog.show(); 



     // Creating volley request obj 
     JsonArrayRequest movieReq = new JsonArrayRequest(url, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); 
         hidePDialog(); 

         // Parsing json 
         for (int i = 0; i < response.length(); i++) { 
          try { 

           JSONObject obj = response.getJSONObject(i); 
           Movie movie = new Movie(); 
           movie.setTitle(obj.getString("FL_NOM_COMPLET")); 
           movie.setThumbnailUrl(obj.getString("FL_IMAGE")); 
           movie.setRating(((Number) obj.get("RATING")) 
             .doubleValue()); 
           movie.setYear(obj.getInt("FL_NUM_TELE")); 

           // Genre is json array 
           /* JSONArray genreArry = obj.getJSONArray("FL_description_travail"); 
           ArrayList<String> genre = new ArrayList<String>(); 
           for (int j = 0; j < genreArry.length(); j++) { 
            genre.add((String) genreArry.get(j)); 
           }*/ 
           movie.setGenre(obj.getString("FL_description_travail")); 

           // adding movie to movies array 
           movieList.add(movie); 

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

         } 

         // notifying list adapter about data changes 
         // so that it renders the list view with updated data 
         adapter.notifyDataSetChanged(); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       showMessage("error",error.getMessage()); 
       hidePDialog(); 

      } 
     }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(movieReq); 
    } 
... 
} 

そして、問題はそれが発生していますの出力がjs配列に変換できないという例外です。

+0

は、実際にはその戻り – theinarasu

+0

前に配列をjson_encodeしようこれはコードの完成です$ response ["message"] = "No Items Found"; } // JSON応答をエコーする echo json_encode($ response); ?> –

+0

なぜ内部で(int i = 0; i theinarasu

答えて

1

あなたJSONJSONArrayはありませんが、それの分野でJSONArrayJSONObject:次のように

{ 
    "orders":[ 
     { 
     "ID_FL":"1", 
     "FL_LOGIN":"log" 
     }, 
     { 
     "ID_FL":"7", 
     "FL_LOGIN":"L" 
     } 
    ] 
} 

はあなたのコードは次のようになります。

JsonArrayRequest movieReq = new JsonArrayRequest(url, 
//here is the change 
     new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       Log.d(TAG, response.toString()); 
       hidePDialog(); 


       // Parsing json 
//and here too 
       JSONArray jsonArray = response.getJSONArray("orders"); 
       for (int i = 0; i < jsonArray.length(); i++) { 
        try { 
//and here also 
         JSONObject obj = jsonArray.getJSONObject(i); 
         Movie movie = new Movie(); 
         movie.setTitle(obj.getString("FL_NOM_COMPLET")); 
         movie.setThumbnailUrl(obj.getString("FL_IMAGE")); 
         movie.setRating(((Number) obj.get("RATING")) 
           .doubleValue()); 
         movie.setYear(obj.getInt("FL_NUM_TELE")); 

         // Genre is json array 
         /* JSONArray genreArry = obj.getJSONArray("FL_description_travail"); 
         ArrayList<String> genre = new ArrayList<String>(); 
         for (int j = 0; j < genreArry.length(); j++) { 
          genre.add((String) genreArry.get(j)); 
         }*/ 
         movie.setGenre(obj.getString("FL_description_travail")); 

         // adding movie to movies array 
         movieList.add(movie); 

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

       } 

       // notifying list adapter about data changes 
       // so that it renders the list view with updated data 
       adapter.notifyDataSetChanged(); 
      } 
     }, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     VolleyLog.d(TAG, "Error: " + error.getMessage()); 
     showMessage("error",error.getMessage()); 
     hidePDialog(); 

    } 
}); 
+0

そのオブジェクトを削除してその内部に配列を置く方法はありません。この行では –

+0

//ここにもあります JSONArray jsonArray = response.getJSONArray( "orders"); 。 予想されるパラメータ:: 実引数: URL: 文字列 URL リスナーに適用することができないJsonArrayRequestでsonArrayRequest():それは私に未処理の例外org.json.JSONExceptionとwhentryトライキャッチでsuroundするために、この問題が立ち上がっを与えます: com ... Response.Listener ...}}(匿名...リスナー) errorListener: com ... android.volley.Response。 ErrorListener –

関連する問題