2017-11-12 6 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-whyisis-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 내 대답을 편집했습니다. 시도해보십시오. –