0

これがPHPでの私のjson_encodeのサンプルです:

print(json_encode($row));

{"AverageRating":"4.3"}につながります。これは良いことです。

しかし、Javaでは、この4.3の値を取得できないようです。これが(Androidプロジェクトの場合)関連性のないデータを編集したものです。

 public class Rate extends ListActivity {

   JSONArray jArray;
   String result = null;
   InputStream is = null;
   StringBuilder sb = null;
   String Item, Ratings, Review, starAvg;
   RatingBar ratingsBar;
   ArrayList<NameValuePair> param;

  public void onCreate(Bundle savedInstanceState) {

      starAvg = "0"; // Sets to 0 in case there are no ratings yet.
      new starRatingTask().execute();
      ratingsBar = (RatingBar) findViewById(R.id.theRatingBar);


  class starRatingTask extends AsyncTask<String, String, Void> {

    InputStream is = null;
    String result = "";


    @Override
    protected Void doInBackground(String... params) {
        String url_select = "http://www.---.com/---/average_stars.php";

        ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
        param.add(new BasicNameValuePair("item", Item));


        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url_select);


        try {
            httpPost.setEntity(new UrlEncodedFormEntity(param));
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();

            // read content
            is = httpEntity.getContent();

        } catch (Exception e) {

            Log.e("log_tag", "Error in http connection " + e.toString());
        }
        try {
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(is));
            StringBuilder sb = new StringBuilder();
            String line = "";
            while ((line = br.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();

        } catch (Exception e) {

            Log.e("log_tag", "Error converting result " + e.toString());
        }

        return null;

    }

    protected void onPostExecute(Void v) {

        String starAvgTwo = null;
        try {
            jArray = new JSONArray(result);
            JSONObject json_data = null;
            for (int i = 0; i < jArray.length(); i++) {
                json_data = jArray.getJSONObject(i);
                starAvg = json_data.getString("AverageRating");

                   starAvgTwo = starAvg;

            }
        } catch (JSONException e1) {
            Toast.makeText(getBaseContext(), "No Star Ratings!",
                    Toast.LENGTH_LONG).show();
        } catch (ParseException e1) {
            e1.printStackTrace();
        }


                Toast.makeText(getBaseContext(), starAvgTwo,
                        Toast.LENGTH_LONG).show();

        ratingsBar.setRating(Float.valueOf(starAvg));



    }
}

その2番目のトーストは空白を生成します(私は ""-空の文字列を想定していますか?)。トースト変数をstarAvgに戻すと、トーストは「0」になります。

4.3の値を取得するにはどうすればよいですか。

4

2 に答える 2

1

JSONに配列が含まれていないと思います。だからこれを行うだけです:

JSONObject jsonObject = new JSONObject(result); //to convert string to be a JSON object
String averageRating = jsonObject.getString("AverageRating"); //get the value of AverageRating variable

そしてaverageRatingをトーストしてみてください。

そして、JSONオブジェクトから配列を取得する方法は?

JSONを使用している場合:

{"employees": [
    { "firstName":"John" , "lastName":"Doe" }, 
    { "firstName":"Anna" , "lastName":"Smith" }, 
    { "firstName":"Peter" , "lastName":"Jones" }]
}

次に、このコードを使用します

JSONArray jsonArray = new JSONArray(result);
for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject jsonObject = jsonArray.getJSONObject(i);
    Log.i(Rate.class.getName(), jsonObject.getString("firstName"));
}

そのコードは生成します

ジョンアンナピーター

LogCatで

于 2012-06-22T22:11:01.370 に答える
1

元の質問のコメントで説明したように、PHPは配列ではなく単一のJSONObjectとして送信しています。現在の状態では、JSONObjectとして解析する必要があります。ただし、値オブジェクトの配列の送信を開始する場合は、JSONArrayを使用して解析します。

于 2012-06-22T22:15:22.913 に答える