سؤال

I want to access Android apps through Web-Service. In the web service the new registration is performed. In the android apps, the xml file for the new registration is made. The data is saved successfully in SQL server database and it save properly by web service and return data get in jason string. But when string is converted to JSONObject, it give me error like this:

Error parsing data org.json.JSONException: Value [{"userid":105,"created_at":"03-Oct-2013","success":1,"email":"rty@gmail.com","password":"rty12345","name":"rtyu"}] of type org.json.JSONArray cannot be converted to JSONObject

I have made activity for registration as RegisterActivity.java

              else
              {
                  erName.setText("");
                  erPass.setText("");
                  erEmail.setText("");
                  erCopass.setText("");
                  UserFunction userFunction = new UserFunction();
                  JSONObject json = userFunction.registerUser(name, email, password);

                  // check for login response
                  try {
                      if (json.getString(KEY_SUCCESS) != null) {
                          String res = json.getString(KEY_SUCCESS); 
                          if(Integer.parseInt(res) == 1){
                              // user successfully registred
                              // Store user details in SQLite Database
                              Databasehandler db = new Databasehandler(getApplicationContext());
                              JSONObject json_user = json.getJSONObject("user");

                              // Clear all previous data in database
                              userFunction.logoutUser(getApplicationContext());
                              db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_EMAIL),   
                           json.getString(KEY_UID), json_user.getString(KEY_CREATED_AT));                        
                              // Launch Dashboard Screen
                              Intent login = new Intent(getApplicationContext(), LoginActivity.class);
                              // Close all views before launching Dashboard
                              login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                              startActivity(login);
                              // Close Registration Screen
                              Toast.makeText(RegisterActivity.this,"You are Registered   successfully",Toast.LENGTH_SHORT).show();
                              finish();
                          }else{
                              // Error in registration
                              Toast.makeText(RegisterActivity.this,"User Allready Registered!!!",Toast.LENGTH_LONG).show();
                          }
                      }
                  } catch (JSONException e) {
                      e.printStackTrace();
                  }
              }
        }
          });

In that the error is occur at the line:

  if (json.getString(KEY_SUCCESS) != null)

In the JSONParser class, jObj get the null value. The problem is at the line: jObj = new JSONObject(json);
Code of the JSONParser class :

 public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        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();
        Log.e("JSON", json);
    } 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;

}

}

Another class of UserFunction in which the service call : public class UserFunction {

 private JSONParser jsonParser;

  // Testing in localhost using wamp or xampp 
 // use http://10.0.2.2/ to connect to your localhost ie http://localhost/
    private static String loginURL = "http://192.168.1.120/rvAndroidServices.ashx";
private static String registerURL = "http://192.168.1.120/rvAndroidServices.ashx";
private static String name1 = "http://192.168.1.120/rvAndroidServices.ashx";

private static String login_tag = "login";
private static String register_tag = "register";
private static String name_tag = "name";

// constructor
public UserFunction(){
    jsonParser = new JSONParser();
}

/**
 * function make Login Request
 * @param email
 * @param password
 * */
public JSONObject loginUser(String email, String password){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", login_tag));
    params.add(new BasicNameValuePair("email", email));
    params.add(new BasicNameValuePair("password", password));
    jsonParser= new JSONParser();
    JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
    // return json
    // Log.e("JSON", json.toString());
    return json;
}

/**
 * function make Login Request
 * @param name
 * @param email
 * @param password
 * */
public JSONObject registerUser(String name, String email, String password){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", register_tag));
    params.add(new BasicNameValuePair("name", name));
    params.add(new BasicNameValuePair("email", email));
    params.add(new BasicNameValuePair("password", password));
    jsonParser   = new JSONParser();
    // getting JSON Object
    JSONObject json = jsonParser.getJSONFromUrl(registerURL, params);
    // return json
    return json;
}


/**
 * Function get Login status
 * */
public boolean isUserLoggedIn(Context context){
    Databasehandler db = new Databasehandler(context);
    int count = db.getRowCount();
    if(count > 0){
        // user logged in
        return true;
    }
    return false;
}

public String getAppCategorydetail(Context context){
    Databasehandler db = new Databasehandler(context);
    String count = db.getAppCategorydetail();

        return count;

}
/**
 * Function to logout user
 * Reset Database
 * */
public boolean logoutUser(Context context){
    Databasehandler db = new Databasehandler(context);
    db.resetTables();
    return true;
}

public JSONObject chname(String name) 
{
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", name_tag));
    params.add(new BasicNameValuePair("name", name));
     JSONObject json = jsonParser.getJSONFromUrl(name1, params);
    return json;

}

}
هل كانت مفيدة؟

المحلول 2

Error parsing data org.json.JSONException: Value [{"userid":105,"created_at":"03-Oct-2013","success":1,"email":"rty@gmail.com","password":"rty12345","name":"rtyu"}] of type org.json.JSONArray cannot be converted to JSONObject

Your Exception explaining you everything

Your String is JSONArray not JSONObject you need to get JSONObject from JSONArray.

So use JSONArray to get JSONOBbject Change to:

jObj  = new JSONArray(json).getJSONObject(0);

نصائح أخرى

In response string you are getting jsonArray and not JsonObject, So when you say

try {
    jObj = new JSONObject(json);            
}

here json needs to be converted in JsonArray instead JSONObject. After that get the first object from json array.

something like :

try {
    JSONArray jArr = new JSONArray(json);  
    JSONObject jObj = jArr.getJSONObject(0);      
}

hope this helps !

Try this...

JSONArray data = jsonObj.getJSONArray("data");

the chances are your web service (apis) is not returning teh data as "json" if apis are written in php - try adding line below

header('Content-Type: application/json');

and it should work.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top