Autore Topic: Problema Widget variabile si azzera ogni volta  (Letto 657 volte)

Offline majey01

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
Problema Widget variabile si azzera ogni volta
« il: 26 Marzo 2013, 10:04:13 CET »
0
Buongiono a tutti ho un problema: ho creato un widget semplice che aggiorna una textview ogni tot secondi assegnando al textview in sequenza i dati contenuti in un vettore. Per aumentare l'indice del vettore uso il contatore "i" che incremento ad ogni chiamata onupdate() ma non capisco perché ogni volta il contatore "i" si azzera e quindi sulla textview ho sempre il primo dato.

questo di seguito e' il listato dell' appwidget:

package com.mamlambo.imageswidget;


import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;


import android.app.AlarmManager;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.SystemClock;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;

public class ImagesWidgetProvider extends AppWidgetProvider {
    private static final String LOG_TAG = "ImagesWidgetProvider";

    public static final String URI_SCHEME = "images_widget";

// vettore con i dati da visualizzare di volta in volta
        private static final String[] linea= { "ciao1","ciao2","ciao3","ciao4","ciao5"  };

// contatore
    int i=0;
   
    @Override
    public void onEnabled(Context context) {
        // This is only called once, regardless of the number of widgets of this
        // type
        // We do not have any global initialization
        Log.i(LOG_TAG, "onEnabled()");
        super.onEnabled(context);
    }

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        Log.d(LOG_TAG, "onUpdate(): ");
// incremento il contatore
        i++;        for (int appWidgetId : appWidgetIds) {

                       
              
            RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget);
            remoteView.setTextViewText(R.id.textView1, linea);
           
            appWidgetManager.updateAppWidget(appWidgetId, remoteView);
         
        }
        // super.onUpdate(context, appWidgetManager, appWidgetIds);
    }

    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        Log.d(LOG_TAG, "onDelete()");

        for (int appWidgetId : appWidgetIds) {

            // stop alarm
            Intent widgetUpdate = new Intent();
            widgetUpdate.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
            widgetUpdate.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
            widgetUpdate.setData(Uri.withAppendedPath(Uri.parse(URI_SCHEME + "://widget/id/"), String.valueOf(appWidgetId)));
            PendingIntent newPending = PendingIntent.getBroadcast(context, 0, widgetUpdate, PendingIntent.FLAG_UPDATE_CURRENT);

            AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            alarms.cancel(newPending);

            // remove preference
            Log.d(LOG_TAG, "Removing preference for id " + appWidgetId);
            SharedPreferences config = context.getSharedPreferences(ImagesWidgetConfiguration.PREFS_NAME, 0);
            SharedPreferences.Editor configEditor = config.edit();

            configEditor.remove(String.format(ImagesWidgetConfiguration.PREFS_UPDATE_RATE_FIELD_PATTERN, appWidgetId));
            configEditor.commit();
        }

        super.onDeleted(context, appWidgetIds);
    }

        @Override
    public void onReceive(Context context, Intent intent) {
       final String action = intent.getAction();
        Log.d(LOG_TAG, "OnReceive:Action: " + action);
        if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
            final int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
            if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
                this.onDeleted(context, new int[] { appWidgetId });
            }
        } else if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {

            if (!URI_SCHEME.equals(intent.getScheme())) {
               
                final int[] appWidgetIds = intent.getExtras().getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);

                for (int appWidgetId : appWidgetIds) {

                    // get the user settings for how long to schedule the update
                    // time for
                    SharedPreferences config = context.getSharedPreferences(ImagesWidgetConfiguration.PREFS_NAME, 0);
                    int updateRateSeconds = config.getInt(String.format(ImagesWidgetConfiguration.PREFS_UPDATE_RATE_FIELD_PATTERN, appWidgetId), -1);
                    if (updateRateSeconds != -1) {
                        Log.i(LOG_TAG, "Starting recurring alarm for id " + appWidgetId);
                        Intent widgetUpdate = new Intent();
                        widgetUpdate.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
                        widgetUpdate.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { appWidgetId });

                        // make this pending intent unique by adding a scheme to
                        // it
                        widgetUpdate.setData(Uri.withAppendedPath(Uri.parse(ImagesWidgetProvider.URI_SCHEME + "://widget/id/"), String.valueOf(appWidgetId)));
                        PendingIntent newPending = PendingIntent.getBroadcast(context, 0, widgetUpdate, PendingIntent.FLAG_UPDATE_CURRENT);

                        // schedule the updating
                        AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
                        alarms.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), updateRateSeconds * 1000, newPending);
                    }
                }
            }
            super.onReceive(context, intent);

        } else {
           
            super.onReceive(context, intent);
        }
       
    }

}

cosa ne pensate? come posso risolvere?



PS: inserisco anche il manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mamlambo.imageswidget"
    android:versionCode="1"
    android:versionName="1.0">
    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:debuggable="true">
        <activity
            android:name=".ImagesWidgetConfiguration"
            android:label="@string/app_name">
            <intent-filter>
                <action
                    android:name="android.intent.action.MAIN" />
                <category
                    android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action
                    android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
            </intent-filter>
        </activity>
        <receiver
            android:name="ImagesWidgetProvider">
            <intent-filter>
                <action
                    android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/imageswidget_info" />
        </receiver>
        <receiver
            android:name="ImagesWidgetProvider">
            <intent-filter>
                <action
                    android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                    <data android:scheme="images_widget" />
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/imageswidget_info" />
        </receiver>
    </application>
    <uses-sdk
        android:minSdkVersion="3" />
</manifest>
« Ultima modifica: 26 Marzo 2013, 10:10:13 CET da majey01 »