我试着打电话给" AsyncTask"来自另一个名为" MainActivity"但是" AsyncTask"类位于名为" SiteAdapter"的类中。我试图传递一个引用,但它不起作用。怎么可能呢?
主要活动:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("StackSites", "OnCreate()");
setContentView(R.layout.activity_main);
//Call the class AsyncTask
new GetAddressTask(this).execute(); // <----ERROR - GetAddressTask cannot be resolved to a type
}
}
SitesAdapter类中的AsyncTask:
public class SitesAdapter extends ArrayAdapter<StackSite> {
...//PROCESS
public class GetAddressTask extends AsyncTask<String, Void, String> {
Context mContext;
public GetAddressTask(Context context) {
super();
mContext = context;
}
//Pass a reference to MainActivity
private MainActivity mainActivity; // <--- WARNING - The value of the field SitesAdapter.GetAddressTask.mainActivity is not used
public GetAddressTask(MainActivity mainActivity)
{
this.mainActivity = mainActivity;
}
@Override
protected String doInBackground(String... arg0) {
...
}
@Override
protected void onPostExecute(String result) {
...
}
}
}
答案 0 :(得分:4)
首先,MainActivity
不是您无法定义对象的类。它扩展了Activity
。
用它更改你的AsyncTask
课程;
public static class GetAddressTask extends AsyncTask<String, Void, String> {
Context mContext;
public GetAddressTask(Context context) {
super();
mContext = context;
}
@Override
protected String doInBackground(String... values) {
// If you want to use 'values' string in here
String values = values[0];
}
@Override
protected void onPostExecute(String result) {
...
}
}
然后用它来调用它;
String values = ""; //You can pass any string value to GetAddressTask with that parameter
//Call the class AsyncTask
new SitesAdapter.GetAddressTask(this).execute(values);
答案 1 :(得分:3)
make GetAddressTask
static:
public static class GetAddressTask
答案 2 :(得分:2)
试试这个,这对我有用。
只需在SitesAdapter
课程中创建一个方法,然后通过这样的MainActivity
来调用它:
new SitesAdapter().start(MainActivity.this);
现在在SitesAdapter
课程中执行此操作:
private Context mContext;
public void start(){
mContext = context;
new GetAddressTask().execute();
}
这可以帮助你
答案 3 :(得分:0)
您可以将其设为static
,然后使用
SitesAdapter.GetAddressTask myClass = new SitesAdapter.GetAddressTask();
myClass.execute();
但是,如果您在多个活动中需要这个,那么将它从该类中取出并将其放在自己的文件中可能是值得的。
如果您需要更新任务中的用户界面,可以see this answer使用interface
回复您的来电Activity
。