2012-01-23 15 views
0

私は、AppWidgetProviderクラスのonUpdate()セクションから開始されたサービスによって更新されているApp Widgetに取り組んでいます。問題は、ウィジェットサービス内でカーソルを使用するたびにビューがウィジェットに追加されないことです。 SQLクエリ/結果を文字列に置き換えるだけで動作します。SQliteクエリを使用したAndroid Appウィジェット

(のContentProvider/SQLを使用して)動作していない例:

public class TestWidgetService extends Service { 

    @Override 
    public void onStart(Intent intent, int startId) { 

     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext()); 

     ComponentName thisWidget = new ComponentName(getApplicationContext(), TestWidget.class); 

     int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 

     for (int widgetId : allWidgetIds) { 

      RemoteViews remoteViews = new RemoteViews(
        getApplicationContext().getPackageName(), 
        R.layout.test_widget 
        ); 

      // get items 

      Uri items = Uri.parse(TestWidgetContent.CONTENT_URI + "/news/1"); 
      Cursor iCursor = getContentResolver().query(items, null, null, null, "ITM_TIMESTAMP DESC"); 
      if (iCursor == null) { 
       continue; 
      } 
      else if (iCursor.moveToFirst()) { 
       while (iCursor.isAfterLast() == false) { 

        Log.w("got", iCursor.getString(iCursor.getColumnIndex("FED_TITLE"))); 

        RemoteViews item = new RemoteViews(
          getApplicationContext().getPackageName(), 
          R.layout.test_widget_item 
        ); 

        item.setTextViewText(
          R.id.test_widget_item_feed, 
          iCursor.getString(iCursor.getColumnIndex("FED_TITLE")) 
         ); 

        item.setTextViewText(
          R.id.test_widget_item_title, 
          iCursor.getString(iCursor.getColumnIndex("ITM_TITLE")) 
         ); 

        remoteViews.addView(R.id.test_widget_items, item); 

        iCursor.moveToNext(); 
       } 
      } 
      iCursor.close(); 


      // 

      appWidgetManager.updateAppWidget(widgetId, remoteViews); 
     } 

     stopSelf(); 
     super.onStart(intent, startId); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

この例では、SQL戻り結果ビューが追加されていても、追加のビューなしのみレイアウト「test_widget」を示しています。

の作業例(文字列のみ):

public class TestWidgetService extends Service { 

    @Override 
    public void onStart(Intent intent, int startId) { 

     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext()); 

     ComponentName thisWidget = new ComponentName(getApplicationContext(), TestWidget.class); 

     int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 

     for (int widgetId : allWidgetIds) { 

      RemoteViews remoteViews = new RemoteViews(
        getApplicationContext().getPackageName(), 
        R.layout.test_widget 
        ); 

      // get items 

        RemoteViews item = new RemoteViews(
          getApplicationContext().getPackageName(), 
          R.layout.test_widget_item 
        ); 

        item.setTextViewText(
          R.id.test_widget_item_feed, 
          "feed" 
         ); 

        item.setTextViewText(
          R.id.test_widget_item_title, 
          "title" 
         ); 

        remoteViews.addView(R.id.test_widget_items, item); 

      // 

      appWidgetManager.updateAppWidget(widgetId, remoteViews); 
     } 

     stopSelf(); 
     super.onStart(intent, startId); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

この実施例では、私がしようと先週過ごしてきた

のLinearLayout IDが「test_widget_items」内に挿入されたビューのレイアウト「test_widget」を示していこのウィジェットにSQL結果を使用させると、だれかが間違っているかもしれないというわずかなアイデアはありますか?

+0

私はだけではなく、完全なDBをインスタンス化の)TestWidgetService.this.openOrCreateDatabaseを(試してみましたヘルパークラスが、私は同じ問題を抱えているが、結果が正しく読み込まれている(そしてLogCatに表示されていても)追加されたビューはウィジェットに表示されません。 – Andre

答えて

0

が、それはエミュレータとの問題だったが判明し、AVDのスナップショットを削除して、再度アプリを起動した後、ウィジェットは大丈夫だった

関連する問題