Autore Topic: Richiamare array di stringhe in un widget  (Letto 789 volte)

Offline purer

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Wildfire
Richiamare array di stringhe in un widget
« il: 20 Marzo 2011, 11:39:45 CET »
0
Salve a tutti, sono nuovo dell'ambiente e come ogni nuovo che si rispetti ho un problema  :-)

Prima di tutto spero di aver postato nella sezione giusta e in caso contrario chiedo umilmente perdono  O:-)

Il mio problema è il seguente: non riesco a richiamare un array di stringhe presente nel file strings.xml all'interno di un widget però riesco a farlo all'interno di un'Activity.

L'obiettivo è quello di visualizzare in modo random un componente dell'array.

All'interno dell'Activity uso il seguente codice per salvare l'array in una variabile

Codice (Java): [Seleziona]
Resources res = getResources();
String[] frase = res.getStringArray(R.array.Frasi);

Ma questo non funziona nel caso del widget scritto nel seguente modo:

Codice (Java): [Seleziona]
public class Widget extends AppWidgetProvider {
       
        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
        Timer timer = new Timer();
   
        timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 5000);
        }

        private class MyTime extends TimerTask {
               
                RemoteViews remoteViews;
                AppWidgetManager appWidgetManager;
                ComponentName thisWidget;              
               
                public MyTime(Context context, AppWidgetManager appWidgetManager) {
                        this.appWidgetManager = appWidgetManager;
                        remoteViews = new RemoteViews(context.getPackageName(), R.layout.mainwidget);
                        thisWidget = new ComponentName(context, Widget.class);
                }
               
                public void run() {                            

                        Random numero = new Random();
                        int x = numero.nextInt(15);                

                        Resources res = getResources();                                                //queste sono le righe incriminate
                        String[] frase = res.getStringArray(R.array.Frasi);                            //
                   
                        remoteViews.setTextViewText(R.id.widget_textview,frase[x]);
                        appWidgetManager.updateAppWidget(thisWidget, remoteViews);                     
                                       
                }
        }
       
}

Il mio gran cervello  8-) 8-)  mi suggerisce che i due casi vengano gestiti in modo diverso.
Qualcuno è disposto a darmi una mano?

Grazie in anticipo  :-)

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Richiamare array di stringhe in un widget
« Risposta #1 il: 20 Marzo 2011, 13:17:33 CET »
0
Definizione di "non funziona"? Ti viene generato qualche errore in fase di compilazione o a runtime? Se si quale? In caso di errore a runtime posta il logcat...
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline purer

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Wildfire
Re:Richiamare array di stringhe in un widget
« Risposta #2 il: 20 Marzo 2011, 13:23:42 CET »
0
Grazie per la risposta innanzitutto.

Sì hai anche ragione scusa  :-)..

Non mi fa compilare perchè segnala un errore alla riga

Codice (Java): [Seleziona]
Resources res = getResources();
L'errore è il seguente:

The method getResources() is undefined for the type Widget.MyTime

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Richiamare array di stringhe in un widget
« Risposta #3 il: 20 Marzo 2011, 13:32:34 CET »
+2
Prova così:

Codice (Java): [Seleziona]
        private class MyTime extends TimerTask {
               
                RemoteViews remoteViews;
                AppWidgetManager appWidgetManager;
                ComponentName thisWidget;      
                Context mContext;
               
                public MyTime(Context context, AppWidgetManager appWidgetManager) {
                        this.appWidgetManager = appWidgetManager;
                        remoteViews = new RemoteViews(context.getPackageName(), R.layout.mainwidget);
                        thisWidget = new ComponentName(context, Widget.class);
                        mContext = context;
                }
               
                public void run() {                            

                        Random numero = new Random();
                        int x = numero.nextInt(15);                

                        Resources res = mContext.getResources();                                                //queste sono le righe incriminate
                        String[] frase = res.getStringArray(R.array.Frasi);                            //
                   
                        remoteViews.setTextViewText(R.id.widget_textview,frase[x]);
                        appWidgetManager.updateAppWidget(thisWidget, remoteViews);                      
                                       
                }
        }
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline purer

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Wildfire
Re:Richiamare array di stringhe in un widget
« Risposta #4 il: 20 Marzo 2011, 13:42:03 CET »
0
Semplice ma efficace  :-)

Quindi se ho capito bene hai dichiarato una variabile che ha uno scope nell'intera classe per salvare il context che ricavo all'interno della funzione per poterlo poi riutilizzare nella seconda funzione?

Mi sembra giusto capire quello che si fa  :-)

E grazie di nuovo per la soluzione!!

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Richiamare array di stringhe in un widget
« Risposta #5 il: 20 Marzo 2011, 15:36:11 CET »
0
Ciao, hai capito bene :)

Scusa se non l'ho spiegato direttamente io ma andavo di fretta e ho fatto prima a postare il codice :P
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline purer

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Wildfire
Re:Richiamare array di stringhe in un widget
« Risposta #6 il: 21 Marzo 2011, 11:57:13 CET »
0
Ok grazie di nuovo..

Sto cercando di imparare a programmare per android avendo qualche base in c++  :-)..

Visto che siete così gentili mi farò di nuovo sentire :-P