2010-08-09 9 views
6

Bazı dizileri bir onUpdate() yönteminde başlatıyorum ve bundan sonra, bir niyet ve bir düğme kullanarak, iyi çalıştıran onUpal() işlevini çağırmaya çalışıyorum ancak onUpdate() yönteminde ayarlanan dizilere erişemiyorum. Neden? Bu diziler nesne değişkenleridir ve kamuya açıklanır. Bir şey mi eksik?Widget onUpdate, onReceive

onready(): AppWidgetProvider API itibaren

package net.aerosoftware.widgettest; 

import java.util.HashMap; 
import android.app.PendingIntent; 
import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
import android.widget.RemoteViews; 

public class WidgetTest extends AppWidgetProvider { 

    public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget"; 
    public HashMap<Integer, String> channelsImages; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) 
    { 
     Log.e("UPDATE", "Start"); 
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main); 

     channelsImages = new HashMap<Integer, String>(); 
     channelsImages.put(0, "one"); 
     channelsImages.put(1, "two"); 

     Intent active = new Intent(context, WidgetTest.class); 
     active.setAction(ACTION_WIDGET_RECEIVER);  
     PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); 
     remoteViews.setOnClickPendingIntent(R.id.buttonclick, actionPendingIntent); 

     super.onUpdate(context, appWidgetManager, appWidgetIds); 
     appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 
     Log.e("UPDATE", "End"); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Log.e("RECEIVE", "Start 2"); 
     if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) 
     { 
      try 
      { 
       Log.e("SIZE", "Size Of channel array: "+channelsImages.size()); 
      } 
      catch(Exception e) 
      { 
       Log.e("ON_RECIEVE_ERROR", " "+e.getMessage()); 
      } 
     } 
     super.onReceive(context, intent); 
     Log.e("RECEIVE", "End"); 
    } 

} 
+2

"Erişemez" ile ne demek istiyorsun? Herhangi bir istisna var mı? içerik boş mu? – DuduAlul

+0

Evet, boş gösterici istisnası. – dfilkovi

+0

Sorunuza kodu ekleyebilir, bu da işleri kolaylaştırır. – DuduAlul

cevap

4

API: "A BroadcastReceiver object is only valid for the duration of the call to onReceive(Context, Intent). Once your code returns from this function, the system considers the object to be finished and no longer active."

Bunu önlemek için bir servisi kullanabilirsiniz.

+0

Widget'ımda, widget'ta "onUpdate" i çalıştırmak istediğim bir yenileme düğmesine sahibim. Bunu AppWidgetProvider'da yapabilir miyim, yoksa bir pendingclickevent kullanmak zorunda mıyım? Teşekkürler. – Si8

0

. "Bu, her yayın için aradı ve yukarıdaki geri arama yöntemlerinin her önce edilir Normalde bu yöntemi çünkü uygulamak gerekmez varsayılan AppWidgetProvider uygulaması tüm App Widget yayınlarını filtreler ve yukarıdaki yöntemleri uygun şekilde çağırır. " Eğer boş alıyorsanız neden) OnReceive() OnUpdate (daha önce çağrılan almak anlamına gelir

, işte

Sen AppWidgetProvider (o uzanır beri BroadcastReceiver) farklı bir örneğini

alıyorsanız

http://developer.android.com/reference/android/appwidget/AppWidgetProvider.html

+0

Hayır, ben – dfilkovi

+0

kodunuzun kısa bir parça eklemek (eşittir (ACTION_WIDGET_RECEIVER). Intent.getAction()) Ben eğer veri ayarladıktan sonra, ben bir alıcı kullandığını biliyorum ve daha yararlı olmaya çalışacağım Kaynak kodunu ekledim – DuduAlul

+0

.. – dfilkovi

İlgili konular