2017-02-07 36 views
-1

我搜查了其他類似的問題,但沒有一個適用於我,所以我想問你們。致命例外:AsyncTask#1

02-07 18:39:03.953 6252-6306/com.example.jl.httpsample 
     E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 
    Process: com.example.jl.httpsample, PID: 6252 
    java.lang.RuntimeException: An error occured while executing doInBackground() 
    at android.os.AsyncTask$3.done(AsyncTask.java:300) 
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
    at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:841) 
    Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
    at android.os.Handler.<init>(Handler.java:200) 
    at android.os.Handler.<init>(Handler.java:114) 
    at android.widget.Toast$TN.<init>(Toast.java:372) 
    at android.widget.Toast.<init>(Toast.java:105) 
    at android.widget.Toast.makeText(Toast.java:264) 
    at com.example.jl.httpsample.MainActivity$1GetJSON.doInBackground(MainActivity.java:70) 
    at com.example.jl.httpsample.MainActivity$1GetJSON.doInBackground(MainActivity.java:45) 
    at android.os.AsyncTask$2.call(AsyncTask.java:288) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)  
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:841)  

這裏是我的代碼


public class MainActivity extends AppCompatActivity { 
    private String json; 
    private String[] data; 
    public static final String MY_JSON = "MY_JSON"; 
    private static final String JSON_URL = "http://127.0.0.1/httpsample.php"; 
    private EditText txtuser, txtpass; 
    Button btnlogin; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     txtpass = (EditText) findViewById(R.id.txtUsername); 
     txtuser = (EditText) findViewById(R.id.txtPassword); 
     btnlogin = (Button) findViewById(R.id.btnLogin); 
     try { 
      btnlogin.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        getJSON(JSON_URL); 
       } 
      }); 
     } catch (Exception e) { 
      Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 
     } 


    } 
    private void getJSON(String url){ 
     class GetJSON extends AsyncTask<String,Void, String> { 
      ProgressDialog loading; 
      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       loading = ProgressDialog.show(MainActivity.this,"Please wait...",null,true,true); 
      } 
      @Override 
      protected String doInBackground(String... params) { 
       String uri = params[0]; 

       BufferedReader bufferedReader; 
       try{ 
        URL url = new URL(uri); 
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); //opens connection duh jl 
        StringBuilder stringBuilder = new StringBuilder(); 
        bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 

        while((json = bufferedReader.readLine())!=null){ 
         data = json.split(" "); 
        } 

        return data.toString(); 
       } 
       catch (Exception e){ 
        Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_LONG).show(); 
        return null; 
       } 

      } 

      @Override 
      protected void onPostExecute(String s) { 
       super.onPostExecute(s); 
       loading.dismiss(); 
       txtuser.setText(s); 
      } 
     } 
     GetJSON gj = new GetJSON(); 
     gj.execute(url); 
    } 
} 

這是一提的是,從doInBackground()附帶的錯誤,但進出口新的Android開發,所以很難讓我明白髮生了什麼。

+1

發佈包含您的'AsyncTask'實現的代碼! – OBX

+0

'Toast.makeText(getBaseContext(),e.​​getMessage(),Toast.LENGTH_LONG).show();'拋出異常其UI你在doinbackground運行 方法 –

回答

0

問題是與

catch (Exception e){   
    Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_LONG).show(); 
    return null; 
} 

吐司需要對違反政策作爲輔助線程doInBackgroun運行UI線程中運行。處理onPostExecute中的錯誤案例。

+0

可能是一個評論 –

+0

@AbhishekSingh然後還有什麼答案是? –

+0

他正在例外。在此之後,他會提出另一個問題,他爲什麼會捕捉異常 –

相關問題