我在asynctask之前检查连接和正确的链接,但有时候应用程序崩溃了,我认为在UI线程上做了。如果我把代码放在AsyncTask上,应用程序总会崩溃。任何解决方案?
on onCreate方法:
if(connectionOK())
{
try {
url = new URL(bundle.getString("direccion"));
con = (HttpURLConnection) url.openConnection();
if(con.getResponseCode() == HttpURLConnection.HTTP_OK)
{
Tarea tarea = new Tarea(this);
tarea.execute();
}
else
{
con.disconnect();
//show alertdialog with the problem
direccionInvalida();
}
} catch (Exception e){e.printStackTrace();}
}
else
{
//show alertdialog with the problem
notConnection()
}
答案 0 :(得分:1)
试试这个,检查doInBackground
内的网络连接。
public class GetTask extends AsyncTask<Void, Void, Integer> {
protected void onPreExecute() {
mProgressDialog = ProgressDialog.show(MainActivity.this,
"Loading", "Please wait");
}
@Override
protected Integer doInBackground(Void... params) {
// TODO Auto-generated method stub
if(connectionOK()){
//ADD YOUR API CALL
return 0;
}esle{
return 1;
}
}
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
if (mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
}
if(result == 0){
//do your stuff
}else{
//show alertdialog with the problem
}
}
}
答案 1 :(得分:0)
你的问题很模糊!
然而:在较新的机器人中,您无法在UI线程上执行此行:
con = (HttpURLConnection) url.openConnection();
所以一个简单的解决方案是在新线程中添加所有内容:
new Thread() {
public void run() {
//add all your code
}
}.start();
但是,您的代码有一些块来显示对话框(猜测):
//show alertdialog with the problem
notConnection();
这些功能应该在UI线程上完成。所以使用处理程序:
//add this outsire the thread
Handler mHandler = new Handler();
然后在你的代码中使用:
mHandler.post(new Runnable() {
public void run() {
notConnection();
}
});
最后,这是一个修复。真正的解决方案是让你无论如何发布AsyncTask并处理onPostExecute()