我的android应用程序设置为当从服务器接收到通知时从服务器获取数据。此通知包含用于查询服务器和下载数据的ID。然而问题是,如果用户在数据下载之前点击通知,则会出现空指针异常。从服务器下载数据时加载/监听器屏幕
我正在寻找用户友好的方式来管理这个,理想的情况下,如果用户在数据下载之前点击这个,那么一个加载符号会出现,直到它被下载。
我没有这样做的具体想法,有没有关于这个问题的任何教程/示例代码?我想我需要使用一个监听器?
谢谢!
我的android应用程序设置为当从服务器接收到通知时从服务器获取数据。此通知包含用于查询服务器和下载数据的ID。然而问题是,如果用户在数据下载之前点击通知,则会出现空指针异常。从服务器下载数据时加载/监听器屏幕
我正在寻找用户友好的方式来管理这个,理想的情况下,如果用户在数据下载之前点击这个,那么一个加载符号会出现,直到它被下载。
我没有这样做的具体想法,有没有关于这个问题的任何教程/示例代码?我想我需要使用一个监听器?
谢谢!
这是一种方式:
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()
方法即可显示ProgressDialog
(此ProgressDialog
应该在实例变量中创建,因此您可以跟踪它并可以从各处调用cancel()
),然后显示您将显示的任何内容您现在拥有的数据。另外,由于您的下载是后台进程,因此您可以使用观察者模式(侦听程序模式),其中您的活动将实现一个让我们假设的接口,其中AsyncTask
是您的下载后台进程的类名称,这个接口应该有Activity在后台进程中调用的方法,比如这样的方法将在AsyncTask
类的中调用,最后一件事是创建一个实例变量(成员) AsyncTask类中的接口,也可能由Constructor
或Setter
方法设置接口。 下面是一个例子:
接口:
public interface MessageHandlerListener {
public void toastMessage(int messageId);
}
活动:
public class AnyActivityThatNeedsToShowAMessageInABackgroundProcessOrInUIThread extends Activity implements MessageHandlerListener {
public void toastMessage(int messageId){
//show a toast implementation
}
}
的AsyncTask:
public class BackgroundProcess extends AsyncTask {
MessageHandlerListener mMessageHandlerListener;
public BackgroundProcess(MessageHandlerListener m){
mMessageHandlerListener = m;
}
protected Object doInBackground(Object[] objects){
return null
}
protected void onPostExecute(Object o) {
mMessageHandlerListener.toastMessage(Message.CONSTANT_MESSAGE);
}
}
这是一种更好的形式给出,让您应用MVC模式在你的后台进程可能是控制器的Android中,你的活动是视图并根据项目的需要有一个好的模型。问候。
您的英语很棒!非常感谢你:) – User24231
不客气,并检查代码我修改了一些不正确的东西:) – JosephChilberry
尝试实施自定义听众 –