我正试图在Android上实现异步,但它不断崩溃我的应用程序,doInBackground中的代码工作,如果我把它放在oncreate,以便我知道它的工作任何帮助非常感谢非常感谢
这是我的代码:
public class accueilEco extends Activity
{
String[] param = new String[5];
TextView nom;
TextView prenom;
ProgressDialog mDialog;
Context ctxt;
TelephonyManager tm;
connectEco ce;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
nom = (TextView) findViewById(R.id.user);
ctxt = getBaseContext();
tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
new chargerParam().execute();
}
public class chargerParam extends AsyncTask<Void, Void, Void> {
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
}
@Override
protected Void doInBackground(Void... params) {
try
{
ce =new connectEco();
param = ce.recupereParam(tm.getDeviceId());
if(String.valueOf(param[4]) == String.valueOf(1))
{
Toast.makeText(ctxt, "Paramétres chargées" , Toast.LENGTH_LONG).show();
//setContentView(R.layout.home);
nom.setText(param[1]+" "+ param[2]+" - "+param[3]);
}
else
{
Toast.makeText(ctxt, "=> login" , Toast.LENGTH_LONG).show();
}
}
catch(Exception ex)
{
Toast.makeText(ctxt, "erreur" , Toast.LENGTH_LONG).show();
}
return null;
}
}
}
1 回答
您无法从UI线程以外的其他线程访问UI对象 . 代码:
将抛出异常 .
您在onPreExecute()或onPostExecute(Result)时可以访问UI元素 . 在doInBackground中访问UI元素时,会导致异常 .
要"fix",您需要仔细阅读并理解AsyncTask实现 . 不是通过
AsyncTask<Void, Void, Void>
声明后台任务,而是可以提供"result type",可以将doInBackground
方法发布到onPostExecute
方法(在UI线程上) .AsyncTask<Void, Void, String>
(String
类型) .你必须做这样的事情: