4

I get a very weird error when I tried to parse a JSON. Effectively, the file is very simple and composed of a simple object as follow :

{
    "registered":false,
    "firstname":"xxx",
    "name":"yyyy",
    "email":"yyyy.xxx@gmail.com",
    "picture":"xxxxx.jpg",
    "username":"xxxy"
}

To parse this file, I used the following code, which is inspired by the example of the Android SDK :

public static boolean isRegistered(int nmb) {
    boolean toReturn = true;
    JsonReader reader = null;
    try {
        reader = new JsonReader(new InputStreamReader(new URL("xxx").openConnection().getInputStream()));
        reader.beginObject();
        while(reader.hasNext()) {
            String name = reader.nextName();
            Log.i("Next value", name);
            switch (name) {
                case "registered":
                    toReturn = reader.nextBoolean();
                    break;
                case "firstname":
                    ProfileManager.getInstance().setFirstname(reader.nextString());
                    break;
                case "name":
                    ProfileManager.getInstance().setName(reader.nextString());
                    break;
                case "email":
                    break;
                case "picture":
                    break;
                case "username":
                    break;
            }
        }
        reader.endObject();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return toReturn;
}

When I start the execution, I get an error rising when performing.

String name = reader.nextName();

The error said that it expects a name but it gets a STRING. To be sure, I replace nextName() by nextString() and I obtained the opposite error : Expected a String but was NAME. I decide to check the first value thanks to the peek() method, and it clearly says that the first element is a NAME. So I tried a very simple thing by reading the object manually, without the loop and it works. How is it possible ? Furthermore, what do I have to modify to make this code workable ?

Thank you !

Androider
  • 3,833
  • 2
  • 14
  • 24
user1382272
  • 189
  • 2
  • 13

3 Answers3

5

try using inbuilt library provided by android sdk

                JSONObject obj = new JSONObject(jsonString);
                boolean registered = obj.getBoolean("registered");
                String firstname = obj.getString("firstname");
                String name = obj.getString("name");
                String email = obj.getString("email");
                String picture = obj.getString("picture");
                String username = obj.getString("username");
Sahil Manchanda
  • 9,812
  • 4
  • 39
  • 89
0
    public String CallUR(String url, int method) {
    BufferedReader bufferedReader = null;
    String result = null;
    HttpURLConnection httpURLConnection = null;
     /* Take an URL Object*/
    try {
        URL url1 = new URL(url);
        httpURLConnection = (HttpURLConnection) url1.openConnection();
        httpURLConnection.setRequestMethod("GET");
        httpURLConnection.setConnectTimeout(20000);
        httpURLConnection.connect();

        InputStream inputStream = httpURLConnection.getInputStream();
        StringBuffer stringBuffer = new StringBuffer();

        if (inputStream == null) {
            return null;
        }

        bufferedReader = new BufferedReader(new              InputStreamReader(inputStream));
        String line = "";
        while ((line = bufferedReader.readLine()) != null) {
            stringBuffer.append(line + " ");
        }

        if (stringBuffer.length() == 0) {
            return null;
        }
        /*Close Input Stream*/
        if (inputStream != null)
            inputStream.close();

        result = stringBuffer.toString();
        return result;
    } catch (MalformedURLException e) {

        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (httpURLConnection != null)
            httpURLConnection.disconnect();

        if (bufferedReader != null)
            try {
                bufferedReader.close();
            } catch (final Exception e) {
            }
    }
    return result;

}



JSONObject jsonObject = new JSONObject(resultString);

String registeredValue= jsonObject .getString("registered");
String firstnameValue= jsonObject .getString("firstname");
String nameValue= jsonObject .getString("name");
String emailValue= jsonObject .getString("email");
String pictureValue= jsonObject .getString("picture");
String usernameValue= jsonObject .getString("username");
Vinay
  • 89
  • 9
0
**If you using java then ,you can create one bean** 

package com.example;

import java.util.HashMap;
import java.util.Map;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;


public class Example {

private Boolean registered;

private String firstname;

private String name;

private String email;

private String picture;

private String username;

/**
* 
* @return
* The registered
*/

public Boolean getRegistered() {
return registered;
}

/**
* 
* @param registered
* The registered
*/
public void setRegistered(Boolean registered) {
this.registered = registered;
}

/**
* 
* @return
* The firstname
*/
public String getFirstname() {
return firstname;
}

/**
* 
* @param firstname
* The firstname
*/
public void setFirstname(String firstname) {
this.firstname = firstname;
}

/**
* 
* @return
* The name
*/
public String getName() {
return name;
}

/**
* 
* @param name
* The name
*/
public void setName(String name) {
this.name = name;
}

/**
* 
* @return
* The email
*/
public String getEmail() {
return email;
}

/**
* 
* @param email
* The email
*/
public void setEmail(String email) {
this.email = email;
}

/**
* 
* @return
* The picture
*/
public String getPicture() {
return picture;
}

/**
* 
* @param picture
* The picture
*/
public void setPicture(String picture) {
this.picture = picture;
}

/**
* 
* @return
* The username
*/
public String getUsername() {
return username;
}

/**
* 
* @param username
* The username
*/
public void setUsername(String username) {
this.username = username;
}

}

**Then after in the function you can pass the bean,Easily you can break it.**

public void display(Example example){
String userName=example.getUsername();
...
...
}
 likewise you can do complete.

If you don't want create the bean then you can directly use the JSON Object

JSONObject obj = new JSONObject(jsonString);

boolean registered = obj.getBoolean("registered");

String firstname = obj.getString("firstname");

String name = obj.getString("name");

String email = obj.getString("email");

String picture = obj.getString("picture");

String username = obj.getString("username");