gpt4 book ai didi

android - 应用程序在实现异步 Android 时崩溃

转载 作者:行者123 更新时间:2023-11-29 16:16:34 24 4
gpt4 key购买 nike

我正在尝试在 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;
}


}

最佳答案

您不能从 UI 线程以外的其他线程访问 UI 对象。代码:

nom.setText(param[1]+" "+ param[2]+" - "+param[3]);

会抛出异常。

您可以在 onPreExecute() 或 onPostExecute(Result) 中访问 UI 元素。在 doInBackground 中访问 UI 元素,将导致异常。


要“解决”这个问题,您需要通读并理解 AsyncTask 执行。而不是通过 AsyncTask<Void, Void, Void> 声明您的后台任务您可以提供可以从 doInBackground 发布的“结果类型” onPostExecute 的方法方法(在 UI 线程上)。 AsyncTask<Void, Void, String> (String 类型)。

你必须做这样的事情:

@Override
protected void onPostExecute(String result) {
if (result != null)
nom.setText(result);
// else show toast
}

@Override
protected String doInBackground(Void... params) {

try {
String[] param = new connectEco().recupereParam(tm.getDeviceId());

if (String.valueOf(param[4]) == String.valueOf(1))
return param[1]+" "+ param[2]+" - "+param[3];

} catch(Exception ex) {
// ignore and return null
}

return null;
}

关于android - 应用程序在实现异步 Android 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9017501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com