2016-05-02 15 views
-3

私はインターネット接続がオフになっているときにログインページに取り組んでいます。間違った電子メールとパスワードが表示されますが、インターネット接続がオンで、間違ったログインメールとパスワードアプリが停止します。私はこれを解決する方法を知らない私を助けてください。Json result = nullのときにアプリケーションが停止しましたか?

これは私のコードです:

@Override 
    protected String doInBackground(String... params) { 
     String login_email = params[0]; 
     String login_password = params[1]; 

     try { 
      URL url = new URL(login_url); 
      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.setDoInput(true); 
      OutputStream outputStream = httpURLConnection.getOutputStream(); 
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
      String data = URLEncoder.encode("login_email", "UTF-8") + "=" + URLEncoder.encode(login_email, "UTF-8") + "&" + 
        URLEncoder.encode("login_password", "UTF-8") + "=" + URLEncoder.encode(login_password, "UTF-8"); 
      bufferedWriter.write(data); 
      bufferedWriter.flush(); 
      bufferedWriter.close(); 
      outputStream.close(); 
      InputStream inputStream = httpURLConnection.getInputStream(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 

      // String response = ""; 
      // JSONString = ""; 
      StringBuilder stringBuilder = new StringBuilder(); 
      while ((JSONString = bufferedReader.readLine()) != null) { 
       // response += JSONString; 
       stringBuilder.append(JSONString + "\n"); 
      } 
      bufferedReader.close(); 
      inputStream.close(); 
      httpURLConnection.disconnect(); 
      return stringBuilder.toString().trim(); 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     loading.dismiss(); 
     if (result != null) { 
      ParseJson(result); 
     } 
     else { 
      Toast.makeText(Login.this, "Incorrect Email and Password", Toast.LENGTH_LONG).show(); 
     } 


    } 

LOGCAT:あなたがソースを見れば

05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime: Process: com.example.mubbasher.howdy_sendgreetings, PID: 26814 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime: java.lang.RuntimeException: An error occured while executing doInBackground() 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at android.os.AsyncTask$3.done(AsyncTask.java:300) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at java.lang.Thread.run(Thread.java:841) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime: Caused by: java.lang.NullPointerException 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at libcore.net.UriCodec.encode(UriCodec.java:132) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at java.net.URLEncoder.encode(URLEncoder.java:57) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at com.example.mubbasher.howdy_sendgreetings.NewsFeedFragment$BackgroundSearch.doInBackground(NewsFeedFragment.java:109) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at com.example.mubbasher.howdy_sendgreetings.NewsFeedFragment$BackgroundSearch.doInBackground(NewsFeedFragment.java:89) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)  
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at java.lang.Thread.run(Thread.java:841)  
+0

[Null Pointer Exceptionとは何ですか?それを修正するにはどうすればいいですか?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) – JimmyB

+0

私はこれらのことをすべて勉強しましたが、私の問題はそのjsonの問題とは異なります.. @JimmyBもし誰かを助けることができないなら他人を離れないように説得しなければならない – bebo

+2

いいえ、あなたの問題違いはありません。あなたのコードをデバッグして、*どのフィールドや変数がnullで、例外を発生させるかを教えてください。 – JimmyB

答えて

1

は常にスタックトレース

05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime: Caused by: java.lang.NullPointerException 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at libcore.net.UriCodec.encode(UriCodec.java:132) 
05-02 23:01:19.103 26814-29816/com.example.mubbasher.howdy_sendgreetings E/AndroidRuntime:  at java.net.URLEncoder.encode(URLEncoder.java:57) 

で "によって引き起こさ" を探してUriCodec.encodeの場合、内部コードがを呼び出すため、null文字列を渡すことはできません。ヌルチェックなしs

public final String encode(String s, Charset charset) { 
    // Guess a bit larger for encoded form 
    StringBuilder builder = new StringBuilder(s.length() + 16); 
    appendEncoded(builder, s, charset, false); 
    return builder.toString(); 
} 

ソース:

https://android.googlesource.com/platform/libcore/+/fe39951ed36353002263aefef7963a8c8b9c6441/luni/src/main/java/libcore/net/UriCodec.java#130

UPDATE:

短い答えはこうです:このメソッドは、内部でアクセスUriCodec.encodeを呼び出しますので、あなたはUrlEncoder.encodeにnull文字列を渡すことはできませんlength()メソッドはnullをチェックせずに文字列をチェックします。そのことを明確にする必要がある場合は、最初のコメントとして彼が投稿したリンクを読む必要があることは間違いありません。解決方法は、文字列を最初にチェックするか、入力がnullの場合は空の文字列を返すラッパーメソッドを作成するか、nullまたは空でない場合はUrlEncoder.encodeを呼び出します。

+0

それは役に立たない答えです@あなたは私のコードでこれを実装する方法を説明したり教えてもらえますか? – bebo

+1

@beboより具体的に私の答えを更新しました – Rich

関連する問題