我發現如果我嘗試從創建活動時的分鐘服務中獲取數據,它總是會拋出空指針異常。那麼如何延遲一段時間,顯示加載動畫,然後獲取數據並刷新視圖。延遲從服務獲取數據以避免空指針
我有一個用於下載文件任務的服務,並且我希望在服務工作時顯示片段中的下載進度。
我將該片段附加到一個活動,該活動在其onCreate生命週期方法上綁定該服務。
// bind transfer service
Intent bIntent = new Intent(this, TransferService.class);
startService(bIntent);
bindService(bIntent, mConnection, Context.BIND_AUTO_CREATE);
Log.d(DEBUG_TAG, "try bind TransferService");
但每次我得到的片段,我得到空指針異常,它說服務是空的。但是我已經將服務綁定到活動上,爲什麼會發生這種情況。
請參閱片段中的方法。
@Override
public void onActivityCreated(Bundle savedInstanceState) {
Log.d(DEBUG_TAG, "onActivityCreated");
super.onActivityCreated(savedInstanceState);
List<DownloadTaskInfo> infos = mActivity.getTransferService().getAllDownloadTaskInfos();
adapter = mActivity.getDownloadTasksAdapter(infos);
transferTasksList.setAdapter(adapter);
}
我想這造成不綁定然而,當我恢復片段的服務,所以我想顯示加載動畫等待服務以獲取綁定,在這之後,我可以設置下載進度的時候列表顯示。
我不知道如何實現這個,asynctask可以做到這一點嗎?在等待綁定時顯示加載動畫,並在綁定時顯示設置數據源。
在此先感謝。
編輯
錯誤日誌
java.lang.NullPointerException
at com.seafile.seadroid2.ui.activity.TransferActivity.getDownloadTaskInfos(TransferActivity.java:244)
at com.seafile.seadroid2.ui.activity.TransferActivity.getDownloadTasksAdapter(TransferActivity.java:212)
at com.seafile.seadroid2.ui.fragment.DownloadTasksFragment.onActivityCreated(DownloadTasksFragment.java:30)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1478)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:945)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1102)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1458)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:470)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
和空指針線244 TansferActivity是
txService.getAllDownloadTaskInfos();
我不知道,Android支持一些這方面的具體溶膠,但如果我是你,我會回調添加到'getAllDownloadTaskInfos()'和我將從服務中調用該回調,當下載完成時,活動知道這一點,隱藏進度條並開始處理數據... – Yazan
也許我沒有清楚地表達意思,getAllDownloadTaskInfos()方法返回所有下載任務的狀態可以是初始化,傳輸和完成。因此,我的意思是在文件傳輸過程中從服務中獲取列表,因爲在此時更新ui纔有意義。 –
所以你甚至在調用'getAllDownloadTaskInfos()'之前需要一些延遲?這可能不是原因,你可能在綁定或其他問題上有問題,但是你可以在綁定之後和調用方法之前在'try/catch'內使用'Thread.slpeep(3000)',我懷疑這是case,但如果它的工作,我會張貼一個更好的解決方案的睡眠時間,並張貼崩潰logcat也是好主意 – Yazan