2017-11-12 3 views
1
FATAL EXCEPTION: main 
               Process: ---, PID: 26657 
               java.lang.NumberFormatException: Invalid int: "12" 

これは私が遭遇している例外で、理由は分かりません。なぜなら、12は通常の整数であるように思えますし、以前はこの問題がなかったからです。それは、私が関係活動に触れなくても、今日始まったばかりです。私は引用符が文字列の一部であるかどうかをチェックしましたが、そうではありません。なぜこれは動作しません。NumberFormatException:なぜ12は無効な整数ですか?

AsyncTask<Uri, Void, Void> asyncTask = new AsyncTask<Uri, Void, Void>() { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      loginButtonLayout.setVisibility(View.GONE); 
      bar.setVisibility(View.VISIBLE); 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      super.onPostExecute(aVoid); 
      ans = ans.replace(" ", ""); 
      ans = ans.replace("\"", ""); 
      Log.d("test2", ans); 
      if (!(ans.equals("false")) || !(ans.equals(""))) { 
       ans = ans.replace("\"", ""); 
       Intent intent = new Intent(LoginActivity.this, MainActivity.class); 
       SharedPreferences.Editor editor = (getBaseContext().getSharedPreferences("USER_DATA", Context.MODE_PRIVATE)).edit(); 
       editor.putBoolean("login", true); 
       int fahrer = Integer.parseInt(ans); 
       editor.putInt("fahrerId", fahrer); 
       editor.clear().apply(); 
       ((Alpacar) getApplication()).setLoginState(true); 
       ((Alpacar) getApplication()).setFahrerId(Integer.parseInt(ans)); 
       Toast.makeText(getBaseContext(), "Login successful", Toast.LENGTH_LONG).show(); 
       finish(); 
       startActivity(intent); 
      } else { 
       Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show(); 
      } 
     } 

     @Override 
     protected Void doInBackground(Uri... uris) { 
      URL url; 
      url = null; 
      try { 
       url = new URL(uri.toString()); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } 
      if (url == null) { 
       Log.e("MainActivity.java", "Error creating URL"); 
       return null; 
      } 


      // new try 
      HttpURLConnection urlConnection = null; 
      InputStream inputStream = null; 
      try { 
       urlConnection = (HttpURLConnection) url.openConnection(); 
       urlConnection.setReadTimeout(10000 /* milliseconds */); 
       urlConnection.setConnectTimeout(15000 /* milliseconds */); 
       urlConnection.setRequestMethod("GET"); 
       urlConnection.connect(); 
       if (urlConnection.getResponseCode() == 200) { 
        inputStream = urlConnection.getInputStream(); 
        ans = readFromStream(inputStream); 
        Log.d("test", ans); 
       } else { 
        Log.e("QueryUtils", "Error response code: " + urlConnection.getResponseCode()); 
       } 

      } catch (ProtocolException e) { 
       Log.e("QueryUtils", "Problem with the protocol", e); 
      } catch (IOException e) { 
       Log.e("QueryUtils", "Problem establishing the connection", e); 

      } finally { 
       if (urlConnection != null) { 
        urlConnection.disconnect(); 
       } 
      } 
      return null; 
     } 
    }; 

問題がonPostExecuteで発生...

+0

を参照してください。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/158965/discussion-on-question-by-adrian-breiding-numberformatexception-why-is-12-an-in)。 – Andy

答えて

1

あなたのデータはUTF8 BOMがef bb bfバイトが含まれてみてください:ここではコンテキストがあります彼らはlogcatに目に見える形で印刷されていません。 (例外メッセージをhexdumpに貼り付けることで調べることができます)。これらのバイトは変換を整数にねじ込みます。

その値を発行するコードを修正するか、コードでBOMバイトを削除します。たとえば、Byte order mark screws up file reading in Java

+0

これはなぜですか'ef bb bf'の値は文字列を入力しますか? –

+0

これは最高のヒントでした。それは今働く... –

0

12」の前にInteger.valueOfは(ans.toString())

+0

いいえ、私はそれを試して、動作しません –

+1

この答えによると、valuleOfは内部的にparseIntを使用します。 https://stackoverflow.com/questions/7355024/integer-valueof-vs-integer-parseint – Juan

+0

@AdrianBreiding私の答えを編集しました。試してみてください –

関連する問題