2015-04-10 6 views
3

Я не способен отображать значения, которые приходят в виде ответа JSonorg.json.JSONObject не могут быть преобразованы в JSONArray

И я не смог преобразовать эти значения и отображать его в TextView ..

Мой réponse является JSON:

{"calculate":{"persons":"148429","cost":25232.93}} 

И Мой главный файл активность Явы:

import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 


public class MainActivity extends ActionBarActivity { 
    TextView uid; 
    TextView name1; 
    TextView email1; 
    Button Btngetdata; 
    //URL to get JSON Array 
    private static String url = "http://urls.p/GetData.php?"; 
    //JSON Node Names 
    private static final String TAG_USER = "calculate"; 
    //private static final String TAG_ID = "id"; 
    private static final String TAG_NAME = "persons"; 
    private static final String TAG_EMAIL = "cost"; 
    JSONArray user = null; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Btngetdata = (Button)findViewById(R.id.getdata); 
     Btngetdata.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       new JSONParse().execute(); 
      } 
     }); 
    } 
    private class JSONParse extends AsyncTask<String, String, JSONObject> { 
     private ProgressDialog pDialog; 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      uid = (TextView)findViewById(R.id.uid); 
      name1 = (TextView)findViewById(R.id.name); 
      email1 = (TextView)findViewById(R.id.email); 
      pDialog = new ProgressDialog(MainActivity.this); 
      pDialog.setMessage("Getting Data ..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 
     @Override 
     protected JSONObject doInBackground(String... args) { 
      JSONParser jParser = new JSONParser(); 
      // Getting JSON from URL 
      JSONObject json = jParser.getJSONFromUrl(url); 
      return json; 
     } 
     @Override 
     protected void onPostExecute(JSONObject json) { 
      pDialog.dismiss(); 

      for (int i = 0; i < json.length(); i++) { 
       try { 
        //JSONObject c = json.getJSONObject(i); 
        // Getting JSON Array 

        JSONObject c = user.getJSONObject(i); 
        // Storing JSON item in a Variable 
        // String id = c.getString(TAG_ID); 
        //System.out.println(); 
        String name = c.getString(TAG_NAME); 
        // System.out.println(name); 
        String email = c.getString(TAG_EMAIL); 
        //System.out.println(email); 
        //Set JSON Data in TextView 
        //uid.setText(id); 
        name1.setText(name); 
        email1.setText(email); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

И JSON Parser Класс:

import android.util.Log; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 

/** 
* Created by Admin on 09-04-2015. 
*/ 
public class JSONParser { 
    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json = ""; 
    // constructor 
    public JSONParser() { 
    } 
    public JSONObject getJSONFromUrl(String url) { 
     // Making HTTP request 
     try { 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 
      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent(); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "n"); 
      } 
      is.close(); 
      json = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 
     // try parse the string to a JSON object 
     try { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 
     // return JSON String 
     return jObj; 
    } 
} 

activity_main.xml файл

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:orientation="vertical" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 
    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/uid" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textColor="#ff000000" /> 
    <TextView 
     android:id="@+id/email" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/name" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:layout_alignRight="@+id/getdata" 
     android:layout_alignEnd="@+id/getdata" 
     android:textColor="#ff000000" /> 
    <TextView 
     android:id="@+id/uid" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentTop="true" 
     android:textColor="#ff000000" /> 

    <Button 
     android:id="@+id/getdata" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="23dp" 
     android:text="Get Data" 
     android:layout_gravity="center_horizontal" /> 

</LinearLayout> 

И LogCat:

04-09 09:04:34.904 1170-1170/com.example.health.myapplication W/System.err﹕ org.json.JSONException: Value {"cost":25232.93,"persons":"148429"} at calculate of type org.json.JSONObject cannot be converted to JSONArray 
+4

это jsonObject не jsonArray – Salmaan

+0

@Salmaan, полностью согласен с вами –

+0

Проверьте JSONObject c = пользователь.getJSONObject (я); line в вашем сообщении Execute – Salmaan

ответ

3

Ваш JSON является JSONObject не JSONArray.

{ представляет JSONObject узлу

[ представляет JSONArray узлу

Таким образом, наличие этого for (int i = 0; i < json.length(); i++) { неправильно

В onPostExecute

JSONObject calculate = json.optJSONObject("calculate"); 
String person = calculate.optString("persons"); 
String cost = calculate.optString("cost"); 
1
JSONObject jsonObject = new JSONObject("your json String will be here"); 
JSONObject jsonObject = jsonObject.getJSONObject("calculate"); 
String persons = jsonObject.getString("persons"); 
String cost = jsonObject.getString("cost"); 
2

попробовать это

public JSONObject getJSONFromUrl(String url) { 

    String response=""; 
     // Making HTTP request 
    try { 
     // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 
     HttpResponse httpResponse = httpClient.execute(httpPost); 
     try { 

      ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
      response = httpclient.execute(httppost, 
          responseHandler); 

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

     //"Sorry, network error", ""); 
    } 
    catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    catch (Exception e) { 
     System.out.println(e); 
    } 
    try { 

     json = new JSONObject(response.toString()); 

     JSONObject subobject = new JSONObject(
           json.getString("calculate")); 

     String persons= (subobject.getString("persons")); 
     String cost= (subobject.getString("cost")); 

    } 
    catch (JSONException e) { 

     System.out.println("exception"); 
     exceptionflag = 0; 

    } 
} 
+0

, пока я пытаюсь этот пример ... httpclient и httppost не могут разрешить как символ – shobhanstack

+0

вам нужно добавить httpclient.jar в свою папку libs, чтобы использовать это –

2

-TOtaly согласен с выше ответ Личность выборки Jsonobject использованием Jsonarray Который является суммарно неправильно. -Вот вы только имея один JsonObject Названы calculate

-Какой забирается с помощью: -

JSONObject jsobobj = json.optJSONObject("calculate"); 

-И другие строки значения выше объекта, так что могут быть выбраны с помощью.

String Firststring = calculate.optString("persons"); 
String Seconstring = calculate.optString("cost"); 

-Чемники!

1

В вашем методе postExecute
Заменить JSONObject c = user.getJSONObject(i);
С JSONObject c = json.getJSONObject(i);

Поскольку пользователь является jsonArray, который никогда не инициализируется,
и вы получаете вашу JSON в json переменной здесь в
doInBackground метод JSONObject json = jParser.getJSONFromUrl(url);