【问题标题】:Showing dialog box in android在android中显示对话框
【发布时间】:2016-01-24 12:34:09
【问题描述】:

我知道这是重复的,但相信我,我已经尝试了许多可用的代码,但仍然无法正常工作。

下面是我的代码

public class LookIn extends AppCompatActivity implements View.OnClickListener{
 @Override
    protected void onCreate(Bundle savedInstanceState) {
    //Initializing properties
}
public void onClick(View v) { 
// Event for button click
callHelper();
}
private void callHelper()
{
    List result=null;
    try {
                 String jsonResponse=new CallmeGetHelperAsyncTask(this).execute(params).get();
                result= RestUtil.getUserList(jsonResponse);
    }
    catch (InterruptedException e) {
                Log.e("Callme", Log.getStackTraceString(e));
    } catch (ExecutionException e) {
                Log.e("Callme", Log.getStackTraceString(e));
        }
        catch(JSONException x)
        {
            Log.e("Callme",Log.getStackTraceString(x) );
        }
    }
}

下面是我的 AsyncTask 类

    public class CallmeGetHelperAsyncTask extends AsyncTask<String,Void,String > {
private AppCompatActivity activity=null;
    private ProgressDialog dialog=null;
    public CallmeGetHelperAsyncTask(){}
    public CallmeGetHelperAsyncTask(AppCompatActivity activity){
        this.activity=activity;
        //this.dialog= dialog;
    }

    @Override
    protected void onPreExecute() {
    if(this.dialog!=null)
        {
            Log.v("Callme", "Starting Dialog");

            dialog = ProgressDialog.show(this.activity, "title", "message");
          //  this.dialog.setMessage("Looking for Helpers");
            this.dialog.show();
        }
        else
        {
            dialog = ProgressDialog.show(this.activity, "title", "message");

        }
    }
    @Override
    protected void onPostExecute(String s) {
        if(this.dialog!=null)
        {
           Log.v("Callme","Closing Dialog");
           this.dialog.dismiss();
        }
        else
        {
            Log.v("Callme","Dialog is not initiated in CallmeGethelperAsyncTask");
        }
    }
    @Override
    protected String doInBackground(String... params) {
    //call to webservice
     }
    }

我不知道上面的代码有什么问题。

我发现了另一个奇怪的东西(奇怪的可能只是因为我是新手)。我尝试从我的ActivityClass 和我的AsyncTask 打印Thread.currentThread.getId(),令人惊讶的是,两者都打印了“1”。

如果我没记错的话,那就是说两个代码都是从同一个线程运行的。

关于这一点,我读过Running multiple AsyncTasks at the same time -- not possible?,上面说之前的线程池只包含 1 个线程,但我使用的是 Android 5.1,它应该包含 5 个线程。所以我再次对此感到困惑。

请花点时间解释一下。谢谢

【问题讨论】:

    标签: java android multithreading android-asynctask


    【解决方案1】:

    替换这个:

    public CallmeGetHelperAsyncTask(AppCompatActivity activity){
            this.activity=activity;
            //this.dialog= dialog;
        }
    

    与:

    private Context context;
    public CallmeGetHelperAsyncTask(Context context){
            this.context=context;
        }
    

    还有这个:

    dialog = ProgressDialog.show(this.activity, "title", "message");
    

    与:

    dialog = ProgressDialog.show(this.context, "title", "message");
    

    还有这个:

    String jsonResponse=new CallmeGetHelperAsyncTask(this).execute(params).get();
    

    与:

    String jsonResponse=new CallmeGetHelperAsyncTask(LookIn.this).execute(params).get();
    

    虽然我宁愿不使用进度对话框的静态方法 show 并构建一个实际进度对话框。

    希望对你有帮助!!!!

    【讨论】:

    • 应用了上述更改,但没有任何更改:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多