0
我有一個android應用程序小部件,其中我使用了網絡調用的異步任務。如果我想將我的呼叫從asynctask轉移到intent服務。 doInBackground()的工作可以在onHandleIntent()中完成,但onPreExecute()和onPostExecute()如何。在這兩種方法中,我有進度條代碼,爲我的刷新按鈕提供旋轉效果。 我應該在意向服務中把這個代碼放在哪裏?從asynctask到意圖服務的映射
UPDATE
public class StoreWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
updateViews = new RemoteViews(context.getPackageName(), R.layout.widget_main_layout1);
mContext = context;
mProgressBar = new ProgressBar(context);
Intent localIntent = new Intent(context,StoreWidgetService.class);
context.startService(localIntent);
// try {
// fetchTask.execute().get();
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (ExecutionException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
MyCurrentLocation(mContext);
imageLoader = new ImageLoader(mContext);
updateViews.setOnClickPendingIntent(R.id.next, next_buildButtonPendingIntent(context));
updateViews.setOnClickPendingIntent(R.id.back, back_buildButtonPendingIntent(context));
updateViews.setOnClickPendingIntent(R.id.refresh, refresh_buildButtonPendingIntent(context));
//----These commented as they use context and this also gets null when killed----
//updateViews.setOnClickPendingIntent(R.id.outer_text_view, merchant_buildButtonPendingIntent(context));
//updateViews.setOnClickPendingIntent(R.id.check_in, checkin_buildButtonPendingIntent(context));
//updateViews.setOnClickPendingIntent(R.id.image_logo_id, pIcon_buildButtonPendingIntent(context));
pushWidgetUpdate(context,updateViews);
}
//my button listeners: next and prev
//--not shown here---
public static void pushWidgetUpdate(Context context,RemoteViews views){
System.out.println("Inside pushwidget");
context = mContext;
if(context!=null){
ComponentName myWidget=new ComponentName(context, StoreWidgetProvider.class);
AppWidgetManager manager=AppWidgetManager.getInstance(context);
manager.updateAppWidget(myWidget, views);
}
}
}
public static class StoreWidgetService extends IntentService implements ServerRequestEnvironment{
public StoreWidgetService() {
super("StoreWidgetService");
// TODO Auto-generated constructor stub
}
// protected void onPreExecute(){
//
// updateViews.setViewVisibility(R.id.refresh, View.GONE);
// updateViews.setViewVisibility(R.id.progress, View.VISIBLE);
// pushWidgetUpdate(mContext,updateViews);
// }
@Override
public int onStartCommand(Intent intent, int flags, int startId){
super.onStartCommand(intent, flags, startId);
return START_REDELIVER_INTENT;
}
@Override
public void onHandleIntent(Intent intent) {
//my data fetching done with all network calls
}
// protected void onPostExecute(Store storeObj) {
//
// updateViews.setViewVisibility(R.id.progress, View.GONE);
// updateViews.setViewVisibility(R.id.refresh, View.VISIBLE);
//
//
// pushWidgetUpdate(mContext,updateViews);
// }
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
}
我讀到它並實施。現在的問題是,一旦服務完成,如果我殺了我的應用程序,我的小部件停止工作,應用程序崩潰。 logcat給我上下文的空指針異常。如何解決這個問題?我希望如果我殺了我的應用程序,我應該獲取已獲取的數據或者再次啓動應用程序。我應該怎麼做呢? – Atihska
在此處搜索START_STICKY,START_REDILIVER_INTENT和其他可以在已啓動服務的onStartCommand()回調中返回的標誌。這些模式可讓系統爲您處理重啓服務以防萬一死機。 –
我嘗試了這兩種方法,但無論使用上下文,他們都會再次給我空指針異常。我正在使用IntentService。我張貼我的代碼。請檢查並指導.. – Atihska