3

I am unable to display the values which are coming in the form of json response

And I am failed to convert these values and display it the textView..

My json reponse is :

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

And My main Activity java file is :

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();
                }
            }
        }
    }
}

And JSON Parser Class:

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 file

<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>

And the 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
3
  • 4
    this is jsonObject not jsonArray Commented Apr 10, 2015 at 4:54
  • @Salmaan, completely agree with you Commented Apr 10, 2015 at 4:56
  • Check JSONObject c = user.getJSONObject(i); line in your post Execute Commented Apr 10, 2015 at 4:57

5 Answers 5

3

Your json is a JSONObject not a JSONArray.

{ represents JSONObject node

[ represents JSONArray node

So having this for (int i = 0; i < json.length(); i++) { is wrong

In onPostExecute

JSONObject calculate = json.optJSONObject("calculate");
String person = calculate.optString("persons");
String cost = calculate.optString("cost");
Sign up to request clarification or add additional context in comments.

Comments

2

-TOtaly agree with above answer Person is fetching Jsonobject using JsonarrayWhich is totaly wrong. -Here you are only having a single JsonObject Named calculate

-Which is fetched by using :-

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

-And other strings are values of above object so can be fetched by using.

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

-THanks!

1 Comment

You made a mistake, it should be String Firststring = jsobobj.optString("persons"); and not String Firststring = calculate.optString("persons");, but I understand what you are trying to say ;)
2

try this

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;

    }
}

2 Comments

while I am trying this example...httpclient and httppost cannot resolve as symbol
you need to add httpclient.jar to your libs folder to use this
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");

Comments

1

In your postExecute method
Replace JSONObject c = user.getJSONObject(i);
With JSONObject c = json.getJSONObject(i);

Because user is a jsonArray which is never initialized,
and you are getting your json in json variable here in
doInBackground method JSONObject json = jParser.getJSONFromUrl(url);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.