0

I want to parse Json to string, to show it on a listView. I search and read lots of Articles and questions but I can't find the solution

I've tried this parser JSON From: Android JSON Parsing Tutorial

    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;

    }
}

And another one from How to parse JSON in Android :

    DefaultHttpClient   httpclient = new DefaultHttpClient(new BasicHttpParams());
HttpPost httppost = new HttpPost("http://someJSONUrl.com/jsonWebService");
// Depends on your web service
httppost.setHeader("Content-type", "application/json");

InputStream inputStream = null;
String result = null;
try {
HttpResponse response = httpclient.execute(httppost);           
HttpEntity entity = response.getEntity();

inputStream = entity.getContent();
// json is UTF-8 by default
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();

String line = null;
while ((line = reader.readLine()) != null)
{
    sb.append(line + "\n");
}
result = sb.toString();
} catch (Exception e) { 
    // Oops
}
finally {
    try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
}

but in both of them when I use a string Json , everything is ok , but when I want to Read Json from a Web API (ex: http://api.androidhive.info/contacts/) this errors comes to me:

09-27 23:47:11.015: E/AndroidRuntime(28635): FATAL EXCEPTION: main
09-27 23:47:11.015: E/AndroidRuntime(28635): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mas.forcheksulotion/com.mas.forcheksulotion.MainActivity}: java.lang.NullPointerException
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1666)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1682)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.os.Looper.loop(Looper.java:130)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.ActivityThread.main(ActivityThread.java:3744)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at java.lang.reflect.Method.invokeNative(Native Method)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at java.lang.reflect.Method.invoke(Method.java:507)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at dalvik.system.NativeStart.main(Native Method)
09-27 23:47:11.015: E/AndroidRuntime(28635): Caused by: java.lang.NullPointerException
09-27 23:47:11.015: E/AndroidRuntime(28635):    at java.io.StringReader.<init>(StringReader.java:46)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at org.json.simple.JSONValue.parse(JSONValue.java:33)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at com.mas.forcheksulotion.MainActivity.onCreate(MainActivity.java:57)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1630)
09-27 23:47:11.015: E/AndroidRuntime(28635):    ... 11 more

And still I don't know for using Json on android I should work with JSONArray , or JSONObject or parse Json to String ?!

3
  • com.mas.forcheksulotion.MainActivity.onCreate(MainActivity.java:57) - what is the code here...MainActivity.java on line 57. That has a null value Commented Sep 28, 2013 at 7:13
  • 1
    I second this request - please provide us with your code so we can help you to get that null value. Also, my personal advice, do not copy and paste any solution will be reported here to parse a JSON, if you don't read a bit about JSON. Here you can find a nice summary/tutorial: elated.com/articles/json-basics Remember, JSON basics have nothing to do with Android, but are necessary whatever technology you will use to manage it. Commented Sep 28, 2013 at 7:17
  • please post data you got from server, aka result. You have 2 modules: get from URL and parse. So verify 1st that you have proper Json (I think - no). After, observer you String Commented Sep 28, 2013 at 7:36

2 Answers 2

1

Do this way.. This is my working code for getiing json response from url using in many app.

 /**
 * This method used to get json from url.
 * 
 * @param url
 *            represented url
 * @return represented {@link JSONObject}
 */
public JSONObject getJSONFromUrl(String url) {

    InputStream is = null;
    JSONObject jObj = null;
    try {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        HttpResponse httpResponse = httpClient.execute(httpGet);

        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();
    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        jObj = new JSONObject(getResponseBody(is));

    } catch (Exception e) {
        e.printStackTrace();
    }
    return jObj;
}

/**
 * This method used to get response body.
 * 
 * @param instream
 *            represented input stream
 * @return represented {@link String}
 * @throws IOException
 *             represented {@link IOException}
 * @throws ParseException
 *             represented {@link ParseException}
 */
public String getResponseBody(final InputStream instream) throws IOException, ParseException {

    if (instream == null) {
        return "";
    }

    StringBuilder buffer = new StringBuilder();

    BufferedReader reader = new BufferedReader(new InputStreamReader(instream, "utf-8"));

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
        }

    } finally {
        instream.close();
        reader.close();
    }
    System.out.println(buffer.toString());
    return buffer.toString();

}
Sign up to request clarification or add additional context in comments.

Comments

-1

I found the problem

two solutions is great and useful , but my mistake was about the uses-permission.

i should add this to the AndroidManifest :

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

1 Comment

Since your real problem was not your JSON parsing code, this whole question is moot. It would be better if you deleted it entirely so that it didn't clutter up the knowledge base.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.