2010-08-09 11 views
6

मैं ऑन-अपडेट() विधि में कुछ एरे शुरू करता हूं और उसके बाद, एक इरादा और बटन का उपयोग करके, मैं ऑनसेप्ट() फ़ंक्शन पर कॉल करने का प्रयास करता हूं जो ठीक चलता है लेकिन अपडेट() विधि में सेट किए गए सरणी तक नहीं पहुंच सकता है। ऐसा क्यों है? वे सरणी ऑब्जेक्ट चर हैं और सार्वजनिक घोषित की जाती हैं। क्या मुझे कुछ याद आ रही है?अद्यतन पर विजेट, ऑन रीसीव

onReady():

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

"एक्सेस नहीं कर सकते" से आपका क्या मतलब है? क्या आपको कोई अपवाद मिलता है? सामग्री खाली है? – DuduAlul

+0

हां, शून्य सूचक अपवाद। – dfilkovi

+0

क्या आप अपने प्रश्न में कोड जोड़ सकते हैं, जिससे चीजों को आसान बना दिया जाएगा। – DuduAlul

उत्तर

4

आप AppWidgetProvider (क्योंकि यह फैली BroadcastReceiver) का एक अलग उदाहरण

हो रही है एपीआई: "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."

आप इससे बचने के लिए एक सेवा का उपयोग कर सकते हैं।

+0

जोड़ा है मेरे पास मेरे विजेट में रीफ्रेश बटन है, जिसे मैं विजेट में "ऑनअपडेट" आग लगाना चाहता हूं। क्या मैं इसे AppWidgetProvider में कर सकता हूं या क्या मुझे लंबित क्लिकवेन्ट का उपयोग करना है? धन्यवाद। – Si8

0
AppWidgetProvider एपीआई से

। "यह हर प्रसारण के लिए ऊपर कॉलबैक तरीकों में से प्रत्येक से पहले कहा जाता है और किया जाता है आप आम तौर पर इस विधि क्योंकि लागू करने के लिए की जरूरत नहीं है डिफ़ॉल्ट AppWidgetProvider कार्यान्वयन सभी ऐप विजेट प्रसारण फ़िल्टर करता है और उपरोक्त विधियों को उपयुक्त के रूप में कॉल करता है। "

जो कि onReceive() onUpdate (से पहले लागू हो का मतलब है), यही कारण है कि आप अशक्त हो रही है है

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

+0

नहीं, मुझे पता है कि, मैं एक रिसीवर का उपयोग मैं अगर साथ डेटा सेट करने के बाद (intent.getAction()। बराबर (ACTION_WIDGET_RECEIVER)) – dfilkovi

+0

अपने कोड के छोटे से टुकड़े जोड़ सकते हैं और मैं अधिक उपयोगी हो करने की कोशिश करेंगे .. – DuduAlul

+0

मैंने सोर्स कोड – dfilkovi

संबंधित मुद्दे