我的Asyn类是一个单独的类文件.
public class AdamTask extends AsyncTask<String, Void, String>{
public void showToast(final String toast)
{
runOnUiThread(new Runnable() {
public void run()
{
Toast.makeText(context, toast, Toast.LENGTH_SHORT).show();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我如何在AsyncTask类中执行此方法?我收到一个错误的方法runOnUiThread(new Runnable(){}) is undefined for the type AdamTask
新的AdamTask(Eve.this,How to pass the eve activity here).execute();
use*_*414 51
只需将上下文强制转换为Activity类
((Activity)context).runOnUiThread(new Runnable()
{
public void run()
{
Toast.makeText(context, toast, Toast.LENGTH_SHORT).show();
}
});
Run Code Online (Sandbox Code Playgroud)
Ang*_*elo 35
你需要有Activity's引用(让我们命名activity)并将它传递给你的AsyncTask类.然后你可以runOnUiThread像这样打电话:
activity.runOnUiThread
Run Code Online (Sandbox Code Playgroud)
该runOnUiThread是在所定义的方法Activity的类.
只需在AsyncTask中添加一个contsructor即可.你的AsyncTask看起来像这样:
public class AdamTask extends AsyncTask<String, Void, String> {
private Activity activity; //activity is defined as a global variable in your AsyncTask
public AdamTask(Activity activity) {
this.activity = activity;
}
public void showToast(final String toast)
{
activity.runOnUiThread(new Runnable() {
public void run()
{
Toast.makeText(activity, toast, Toast.LENGTH_SHORT).show();
}
});
}
...
}
Run Code Online (Sandbox Code Playgroud)
然后打电话给AsyncTask你需要这样的东西:
AdamTask adamTask = new AdamTask(Eve.this);
adamTask.excecute(yourParams);
Run Code Online (Sandbox Code Playgroud)
更新正如Sam在评论中提到的,当配置发生更改时AsyncTasks可能会导致context泄漏(一个例子是屏幕旋转并Activity重新创建).解决这个问题的方法是无头fragment技术.
另一种更有效的方法是使用事件总线.有关更多信息,请参见此处(Sam在评论中提供的链接).
| 归档时间: |
|
| 查看次数: |
34716 次 |
| 最近记录: |