2013-10-04 1 views
3

웹 서비스를 통해 Android 앱에 액세스하려고합니다. 웹 서비스에서 새 등록이 수행됩니다. 안드로이드 앱에서 새 등록을위한 xml 파일이 만들어집니다. 데이터는 SQL 서버 데이터베이스에 성공적으로 저장되고 웹 서비스에 의해 올바르게 저장되고 반환 데이터는 jason 문자열에 저장됩니다. 문자열이 된 JSONObject로 변환 할 때, 그것은 다음과 같이 나에게 오류를 줄 : 그에서 RegisterActivity.java데이터 파싱 오류 - 문자열을 JSONObject로 변환 할 수 없습니다.

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

로 등록 활동을 한

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 

오류는 라인에서 발생이다 :

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

JSONParser 클래스에서 jObj는 null 값을 가져옵니다. JSONParser 클래스의 jObj = new JSONObject(json);
코드 : 문제는 줄입니다

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; 

} 

}

UserFunction의 또 다른 클래스있는 서비스 호출 : 공용 클래스 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; 

} 

} 
+1

친구는 여기 – 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에서 JSONObject를 얻을 필요가 JSONArray not JSONObject이다.

그래서에 JSONOBbject변경 얻을 JSONArray를 사용하면 jsonArray하지 된 JSONObject을 받고 응답 문자열에서

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

시도 { \t jObj = 새로운 된 JSONObject (JSON)을 기록 coomplete; } json string에서 모든 데이터를 가져 오지만, jason 문자열에서 jasonObject jObj로 데이터를 가져 오려고 할 때 jObj가 null입니다. –

+0

@Jack 업데이트 된 답변보기 ... –

+0

시도해 보았지만 다음과 같은 오류가 나타납니다. org.json.JSONException : java.lang.Integer 유형의 userid 값 185를 JSONObject로 변환 할 수 없습니다. 내가하는 일 ? –

3

을, 그래서 당신이 여기

try { 
    jObj = new JSONObject(json);    
} 

을 말할 때 JSON은 할 필요가 JSONObject 대신 JsonArray에서 변환됩니다. 그 후 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 : System.err (1415) : org.json.JSONException : 타입 java.lang.Integer는 JSONObject로 변환 될 수 없습니다 –

+0

"userid"이고 "success"는 숫자 타입입니다. 이것이 문제를 일으킬 것입니까? –

0

이 시도 ... API를 PHP로 작성된 경우

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

기회가 웹 서비스 (API)를있다가 "JSON"로 TEH 데이터를 반환하지 않습니다 -

아래 줄을 추가 시도 헤더 ('Content-Type : application/json');

및 작동해야합니다.첫 번째 응답 코드 다음 붙여 넣기 모든 chahge thid 성공/실패의