2013-10-04 5 views
3

Я хочу получить доступ к приложениям Android через веб-сервис. В веб-службе выполняется новая регистрация. В приложениях для Android создан xml-файл для новой регистрации. Данные успешно сохраняются в базе данных SQL Server и сохраняются корректно с помощью веб-службы и возвращаются данные в строку jason. Но когда строка преобразуется в JSONObject, он дает мне ошибку, как это:Ошибка обработки данных - строка не может быть преобразована в JSONObject

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

Я сделал деятельности для регистрации в качестве 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(); 
        } 
       } 
     } 
      }); 

В том, что ошибка происходит на линии:

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

В классе JSONParser jObj получает нулевое значение. Проблема находится на линии: jObj = new JSONObject(json);
Код класса JSONParser:

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; 

} 

}

Другой класс пользовательской функции, в котором вызов службы: общественного класса Пользовательская функция {

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; 

} 

} 
+1

чувак в первую очередь chahge thid успеха/неуспеха в responsecode, а затем вставить coomplete войти здесь – Dev

ответ

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

Ваше исключение объясняя вам все

вашей строки JSONArray not JSONObject вам нужно получить JSONObject от JSONArray.

Так что используйте JSONArray получить JSONOBbjectПереключаю:

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

попробовать { \t jObj = новый JSONObject (JSON); } В строке json получить все данные, но в jObj есть значение null, когда я пытаюсь получить данные из строки jason в jasonObject jObj. –

+0

@Jack см. Обновленный ответ ... –

+0

Я пробую этот, но он дает мне ошибку вот так: org.json.JSONException: Значение 185 у userid типа java.lang.Integer не может быть преобразован в JSONObject Что я делаю ? –

3

В строке ответа вы получаете jsonArray и не JSONObject, поэтому, когда вы говорите

try { 
    jObj = new JSONObject(json);    
} 

здесь JSON должен быть преобразованный в JsonArray вместо JSONObject. После этого получите первый объект из массива json.

что-то вроде:

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

}

надеюсь, что это помогает!

+0

Здесь дается ошибка E/JSON (1415): [{«userid»: 130, «name»: «ruip», «password»: «ru123456», «email»: «[email protected]», «created_at»: «04-Oct-2013», «success»: 1}] n 10-04 02: 07: 37.915: W/System.err (1415): org.json.JSONException: значение 130 при идентификаторе пользователя type java.lang.Integer не может быть преобразован в JSONObject –

+0

«userid» и «success» - это тип номера. Это будет проблема создания? –

0

Попробуйте это ...

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

шансы ваши веб-службы (APIs) не возвращает Teh данные как "JSON" если APIs написаны на PHP - попробуйте добавить строку ниже

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

и он должен работать.

Смежные вопросы