java - 从 onClick(DialogInterface 对话框) 执行 AsyncTask

标签 java android android-asynctask

目前我有两个java类,1个带有AsyncTask,另一个带有extend DialogFragment。

我想在 ChooseAddContact java 类中调用 CreateGroupTask(AsyncTask) 。 我尝试了几种推荐的方法来执行AsyncTask java,但都失败了。 有什么建议或解决方案吗?

public class ChooseAddContact extends DialogFragment  {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle(R.string.pick_add)
           .setItems(R.array.contact_array, new DialogInterface.OnClickListener() {

               public void onClick(DialogInterface dialog, int which) {
               if (which == 0){
                   AddContactDialog dialog2 = new AddContactDialog();
                dialog2.show(getFragmentManager(), "AddContactDialog");
               } else if (which == 1){

                   **How should I CALL it here??
                   //new CreateGroupTask().execute();

                   //makegroup = new CreateGroupTask();
                   //makegroup.execute();                      
               }**                 
           }
    });
    return builder.create();    }

}

public class CreateGroupTask extends AsyncTask<Void, Void, String> {

private Context mContext;
private ProgressDialog pd;

public CreateGroupTask() {

}
public CreateGroupTask(Context mContext) {
    super();
    this.mContext = mContext; 
}

@Override
protected void onPreExecute() {
    pd = ProgressDialog.show(mContext, null, "Creating group...");
}

@Override
protected String doInBackground(Void... params) {
    String chatId = ServerUtilities.create();
    if (chatId == null) return null;

    try {
        ...
    } catch (SQLException sqle) {}

    return chatId;
}   

@Override
protected void onCancelled() {
    pd.dismiss();
}

@Override
protected void onPostExecute(String result) {
    pd.dismiss();

    if (result != null) {
        Toast.makeText(mContext, "Group created " + result, Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(mContext, "Group creation failed. Please retry later.", Toast.LENGTH_LONG).show();
    }
}

}

最佳答案

在对话框 fragment 中

要启动异步任务,您需要上下文。在对话框Fragment中,您可以通过调用getActivity()来获取上下文;否则,您可以在对话框 fragment 的 onAttach() 生命周期方法中获取 context 或 Activity 引用。已经参数化的构造函数最好删除零参数化构造函数。

new CreateGroupTask(getActivity()).execute();

      (OR)

private Activity activity;

onAttach(Activity activity){
this.activity=activity;
   //store this activity reference
}

//Then Call
new CreateGroupTask(activity).execute();

关于java - 从 onClick(DialogInterface 对话框) 执行 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26842078/

相关文章:

java - 导出到 .jar 后无法解析内容(需要 XML)

java - LibGdx 如何编程 HP Bar?

java - Android模拟器中从本地FTP服务器下载时出现错误 "227 Entering Passive Mode"/"Connection refused"

java - 什么是NullPointerException,我该如何解决?

java - 检查Java中是否使用了类或方法

android - 如何在应用程序强制停止时获得回调

java - 为 Android 项目选择 ORM(最低 API 级别 7)

java - Android 线程错误

android - Http 数据请求(应用程序崩溃)

java - AsyncTask - 如何在 AsyncTask 内使用带有 postDelayed(Runnable, int) 的处理程序?