【问题标题】:Android: Fill a Spinner with progress dialogAndroid:用进度对话框填充 Spinner
【发布时间】:2012-06-08 02:46:30
【问题描述】:

我有一个按钮,当我点击它时,我会加载其他 Activity,在 onCreate 中我调用一个方法,用来自 Web 服务的数据填充微调器。

好吧,当我单击此按钮时,屏幕保持“冻结”状态,然后显示活动。所以,我认为向用户显示一个进度对话框可能是件好事,并在获得 Web Service 的返回后,结束进度对话框。

我尝试使用 Handler,现在我尝试使用 AsyncTask,但是,得到 NullPointerException,因为我的程序在调用 Web 服务之前填充微调器。

private void fillSpinner(){
    //runWebService();
    new CallWebServiceAsyncTask().execute(null);

    mAdapter = new PlanesAdapter(this, allPlanes);
    mList.setAdapter(mAdapter);
}


class CallWebServiceAsyncTask extends AsyncTask<Void, Void, Void> {

 private ProgressDialog progressDialog;

 @Override
 protected void onPreExecute() {

    progressDialog = new ProgressDialog(PlanesActivity.this);
    progressDialog.setMessage("Loading...");
    progressDialog.show();

 }

@Override

 protected Void doInBackground(Void... v) {

    runWebService();
    return null;

 }

 @Override

    protected void onPostExecute(Void result) {

    progressDialog.dismiss();

 }

}

【问题讨论】:

    标签: android nullpointerexception spinner progressdialog


    【解决方案1】:

    因为我的程序在调用 Web 服务之前填充微调器。

    onPostExecute Method中获取数据后填写数据

     @Override
    
        protected void onPostExecute(Void result) {
    
        progressDialog.dismiss();
    
        mAdapter = new PlanesAdapter(this, allPlanes);
        mList.setAdapter(mAdapter);
    
     }
    

    【讨论】:

    • 哇!错误...谢谢,萨米尔!
    【解决方案2】:

    @SamirMangroliya 的建议是正确的,但您甚至需要知道哪里出错了。当您调用 AsyncTask 时,您要求应用程序在后台执行一些操作,这些操作将在非 UI 线程中发生。现在,当您在 AsyncTask 对象上调用 execute() 时,在函数 doInBackground(Void... v) 中编写的应用程序代码在后台运行,并且您的控件返回到调用 execute() [new CallWebServiceAsyncTask().execute(null)] 之后的下一条语句,在您的情况下是操作填充适配器值。这些值尚未从 Web 服务接收。唯一可以确定后台操作已完成的地方是函数onPostExecute(Void result),建议您可以在其中创建适配器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多