2014-01-08 3 views
0

Android에서 로그인 시스템을 구현하려고하는데 StringJsonObject으로 변환하는 중에 오류가 발생합니다. 이것은 나의 활동입니다 :오류 : 형식 java.lang.String의 치명적인 값을 JSONObject로 변환 할 수 없습니다.

public class Login extends Activity implements OnClickListener {  
    private EditText user, pass; 
    private Button mSubmit; 

    private ProgressDialog pDialog; 
    static { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

     StrictMode.setThreadPolicy(policy); 
    } 
    JSONParser jsonParser = new JSONParser(); 

    private static final String LOGIN_URL = "http://sorifgroupcom.ipage.com/Android/login.php"; 

    private static final String TAG_SUCCESS = "success"; 
    private static final String TAG_MESSAGE = "message"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) {   
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 

     user = (EditText) findViewById(R.id.emailLogin); 
     pass = (EditText) findViewById(R.id.MPLogin); 

     mSubmit = (Button) findViewById(R.id.BtnLogin); 

     mSubmit.setOnClickListener(this);   
    } 

    @Override 
    public void onClick(View v) {  
     switch (v.getId()) { 
     case R.id.BtnLogin: 
      new AttemptLogin().execute(); 
      break; 


     default: 
      break; 
     } 
    } 

    class AttemptLogin extends AsyncTask<String, String, String> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(Login.this); 
     pDialog.setMessage("Attempting login..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 

    @Override 
    protected String doInBackground(String... args) { 
     // TODO Auto-generated method stub 
     // Check for success tag 
     int success; 
     String username = user.getText().toString(); 
     String password = pass.getText().toString(); 
     try { 
      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("email", username)); 
      params.add(new BasicNameValuePair("motdepasse", password)); 

      Log.d("request!", "starting"); 
      // getting product details by making HTTP request 
      Log.i("tesssssssssssssssssssst", "test"); 
      JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL, "POST", 
        params); 

      // check your log for json response 
      Log.d("Login attempt", json.toString()); 

      // json success tag 
      success = json.getInt(TAG_SUCCESS); 
      if (success == 1) { 
       Log.d("Login Successful!", json.toString()); 
       // save user data 
       SharedPreferences sp = PreferenceManager 
         .getDefaultSharedPreferences(Login.this); 
       Editor edit = sp.edit(); 
       edit.putString("email", username); 
       edit.commit(); 
       finish(); 
       return json.getString(TAG_MESSAGE); 
      } else { 
       Log.d("Login Failure!", json.getString(TAG_MESSAGE)); 
       return json.getString(TAG_MESSAGE); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     Log.i("tesssssssssssssssssssst", "test"); 
     return null; 

    } 

    protected void onPostExecute(String file_url) { 
     pDialog.cancel(); 
     if (file_url != null) { 
      Toast.makeText(Login.this, "", Toast.LENGTH_LONG).show(); 
     } 

    } 

} 

내가 TextEdit에 값을 넣을 때 로그 캣 다음과 같은 오류가 출력 :

E/JSON Parser(619): Error parsing data org.json.JSONException: 
    Value Fatal of type java.lang.String cannot be converted to JSONObject 
E/AndroidRuntime(619): FATAL EXCEPTION: AsyncTask #1 
E/AndroidRuntime(619): java.lang.RuntimeException: An error occured 
    while executing doInBackground() 

E/AndroidRuntime(619): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
E/AndroidRuntime(619): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
E/AndroidRuntime(619): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
E/AndroidRuntime(619): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
E/AndroidRuntime(619): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
E/AndroidRuntime(619): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
E/AndroidRuntime(619): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
E/AndroidRuntime(619): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
E/AndroidRuntime(619): at java.lang.Thread.run(Thread.java:856) 
E/AndroidRuntime(619): Caused by: java.lang.NullPointerException 
E/AndroidRuntime(619): at org.Soufiane.voyagesociale.Login$AttemptLogin.doInBackground(Login.java:110) 
E/AndroidRuntime(619): at org.Soufiane.voyagesociale.Login$AttemptLogin.doInBackground(Login.java:1) 
E/AndroidRuntime(619): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
E/AndroidRuntime(619): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
E/AndroidRuntime(619): ... 5 more 
E/InputDispatcher(163): channel '41868f48 org.Soufiane.voyagesociale/org.Soufiane.voyagesociale.Login (server)' ~ Channel is unrecoverably broken and will be disposed! 
E/InputDispatcher(163): Received spurious receive callback for unknown input channel. fd=193, events=0x9 
E/BufferQueue(35): [] drainQueueLocked: BufferQueue has been abandoned! 

이 오류가 무엇을 의미합니까? 어떻게 해결할 수 있습니까?

+1

'Login.java' 줄은 무엇입니까? 110. – Raghunandan

+0

Log.d ("Login attempt", json.toString()); –

답변

1

귀하의 오류가 jsonParser.makeHttpRequest 함수 안에 사용하는 것입니다. 아마도 서버에서 올바르게 형식이 지정되지 않은 텍스트를 다운로드하고 있습니다.

"http://sorifgroupcom.ipage.com/Android/login.php"이 반환하는지 확인해야합니다.

는 임은 해당 URL에 어떤 요청을하고 난 아마 당신이 돌아 오는 것을 확인하기 위해 PHP 파일을 확인해야합니다 (응답이 빈 본문이)

어떤 결과를 얻을니까. 원하는 경우 this online tool으로 POST 요청을 시도하고 여기에 응답 본문을 게시하거나 올바른 사용자 이름/암호를 매개 변수로 설정하여 어떤 일이 발생하는지 확인할 수 있습니다.

도 원한다면 오류가 있기 때문에 PHP 파일의 내용을 게시 할 수 있습니다. 아마도 당신의 PHP 파일이 json을 인쇄하지 않을 것입니다.

+0

전자 메일 = [email protected], motdepasse = hatino로 시도 할 수 있습니다 –

+0

내 PHP 파일에서 오류를 발견하고 지금 큰 작품, 감사합니다 카를로스 정말 고마워 노력 –

0

대답은 귀하의 질문에 : -

java.lang.String cannot be converted to JSONObject 

은 분명히 당신이 방법으로 가능하지 않다 JSON로 문자열을 변환하려고합니다. 코드를 다시 보거나 디버깅하여 예외가 발생하는 오류를 알려주십시오. 줄 번호뿐만 아니라 해당 줄의 코드도 마찬가지입니다.

둘째, 당신은이 라인을 작성하지 않도록 AsyncTask를를 사용 : -

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

StrictMode.setThreadPolicy(policy); 

그것은 나쁜 코딩 StrictMode

+0

JSON을 나타내는 문자열을 JSONObject로 변환 할 수 있습니다. http://developer.android.com/reference/org/json/JSONObject.html#JSONObject(java.lang.String) – dm78

+0

나는 erroe 용으로 엄격 모드를 사용합니다. 파일 또는 디렉토리 이고 줄 110은 Log.d ("로그인 시도", json.toString()); –

관련 문제