从服务器下载数据时的加载/监听器屏幕

时间:2013-06-27 18:46:44

标签: android listener

我的Android应用程序设置为从服务器收到通知时从服务器获取数据。此通知包含用于查询服务器和下载数据的ID。但问题是,如果用户在下载数据之前单击通知,则会出现空指针异常。

我正在寻找用户友好的方式来管理这个,理想情况是如果用户在下载数据之前点击这个,那么在下载之前会出现一个加载符号。

我没有这样做的具体想法,是否有关于此问题的任何教程/示例代码?我想我需要使用听众?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一种方式:

 public void showProgressDialog() {
            runOnUiThread(new Runnable() {
                public void run() {
                    mProgressDialog = onCreateProgressDialog();
                    mProgressDialog.show();
                }
            });

}

private ProgressDialog onCreateProgressDialog() {
    ProgressDialog dialog = new ProgressDialog(RequesterActivity.this);
    dialog.setTitle(getString(R.string.label_dialog_item_to_find) +" "+
            ((EditText) findViewById(R.id.edit_text_item_id)).getText().toString());
    dialog.setMessage(getString(R.string.label_dialog_finding_item));
    dialog.setIndeterminate(true);
    dialog.setCancelable(false);
    return dialog;
}

请注意,您可以在此对话框中添加“无风格”,例如Dialog with transparent background in Android或此处android dialog transparent,具体取决于您的需要。

另一方面,我使用ProgressDialog中的一些信息,例如"Please wait while loading item..."。从服务器获取数据后,只需调用显示cancel()的{​​{1}}方法(此ProgressDialog应在实例变量中创建,因此您可以跟踪它并且可以从任何地方拨打ProgressDialog,然后显示您将使用现有数据显示的内容。

作为一个优点,由于您的下载是后台进程,您可以使用观察者模式(侦听器模式),您的Activity将在其中实现一个让我们说cancel()的接口,其中AsyncTaskListener是其名称在下载后台进程的类中,此接口应该具有Activity将在后台进程上调用的方法,让我们说AsyncTask之类的方法将在cancelProgressDialog() onPostExecute()中调用} class,您需要做的最后一件事是在AsyncTask类中创建接口的实例变量(成员),并且可以通过AsyncTaskConstructor方法设置接口。 这是一个例子:

接口:

Setter

的活动:

public interface MessageHandlerListener {
public void toastMessage(int messageId);
}

的AsyncTask:

public class AnyActivityThatNeedsToShowAMessageInABackgroundProcessOrInUIThread extends Activity implements MessageHandlerListener {
    public void toastMessage(int messageId){
        //show a toast implementation
}
}

这是一种更好的方法,让你在android中应用MVC模式,你的后台进程可以是Controller,你的Activity是View,并且根据项目的需要有一个好的模型。问候。