java - 将 AsyncTask 从类中调用到 MainActivity 中

标签 java android android-asynctask

我是 Android 开发新手,我的代码需要一些帮助。我必须在我的主要 Activity 中使用类中的 AsyncTask。我如何在主函数中调用它?

我的主要 Activity :

public class ListActivity extends Activity implements OnItemClickListener {
ArrayList<Person> lista;
ProgressDialog progress;
private ListView lv;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lista);
    lv = (ListView) findViewById(R.id.list);
    lv.setOnItemClickListener(this);

    new DataReturn().onPostExecute("random ip"); 

}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    Person p = (Person) arg0.getItemAtPosition(arg2);
    new AlertDialog.Builder(ListActivity.this).setTitle("Information").setMessage(p.getLastName()).setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            }).setIcon(android.R.drawable.ic_dialog_alert).show();

}

我的 AsyncTask 代码是:

public class DataReturn extends AsyncTask<String,Void,String> {
ArrayList<Person> rlist;
Dialog progress;
ListView rlv;
Context context;
@Override
protected void onPreExecute() {
    super.onPreExecute();
    ProgressDialog progress = new ProgressDialog(null);
    progress.setCancelable(false);
    progress.setMessage("Loading...");
    progress.setTitle("Loading");
    progress.show();
}

protected String doInBackground(String... arg0) {
    return Utils.httpGetFromUrl(arg0[0]);
}

protected void onPostExecute(String result) {
    ArrayList<Person> rlist = Utils.parseJson(result);
    // ArrayAdapter<String> arrayAdapter = new
    // ArrayAdapter<String>(ListActivity.this,
    // android.R.layout.simple_list_item_1);
    ArrayAdapter<Person> adapter = new ClassAdapter(context, rlist);
    rlv.setAdapter(adapter);    
    progress.dismiss();
}   

最佳答案

如果您正在上新类(class),那么您的做法是错误的。如果它是 Mainactivity 的内部类,那么这样做是正确的。

尝试以下操作

//Asuming there is no parameters in the constructor but context other wise 
//delete MainActivity.this

     DataReturn dataReturn = new DataReturn(MainActivity.this);
     dataReturn.execute(your random ip);

关于java - 将 AsyncTask 从类中调用到 MainActivity 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36574948/

相关文章:

android - Android 和 IOS 是否支持亚美尼亚语和索马里语/语言环境?

android - Imageview 和 PagerAdapter

android - 如何顺序运行 AsyncTasks

android - "Fetching JS Bundle"非常慢

Android ListView 不滚动

java - 如何用两个分隔符拆分字符串?

java - 调用构造函数时的 NPE

android - 异步任务 Android 中的 java.util.concurrent.RejectedExecutionException

java - 使用 ExtJS 4 和 Java REST WS 无法进行分页

java - vertx 获取一个简单的 post 请求的正文