我搜查了其他類似的問題,但沒有一個適用於我,所以我想問你們。致命例外: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開發,所以很難讓我明白髮生了什麼。
發佈包含您的'AsyncTask'實現的代碼! – OBX
'Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_LONG).show();'拋出異常其UI你在doinbackground運行 方法 –