我的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
嘗試實施自定義聽衆 –