Как получить данные общих настроек в классе Widget Service без передачи неверных значений по умолчанию или получения ошибок нулевого указателя?

Я пытаюсь запустить виджет в моем приложении. Данные виджета (частота синхронизации, имя пользователя и т. Д.) Определяются в классе WidgetConfig. Затем он открывает провайдер виджетов, который создает виджет, и, наконец, служба обновляет представления и выполняет серверные вызовы для обновления данных.

Here is some of my code:

    //First Widget config is called:
    public class WidgetConfig extends Activity{

        //Stuff happens here to get data from EditTexts and spinners and converts 
        //them to strings.
        //Eventually a button is pressed which enters all the information:

        public void onClick(View v) {
            //Creates a unique string with the app widget ID
            String str = Integer.toString(appWidgetId); 

            sp.putString(editor, str + "::" + "username", user_name);
            //The appWidgetID was unique and so I thought it would work as an
            //identifier for shared prefs.

            //This is the intent for opening the provider
            Intent intentUpdate = new Intent(context, MailWidgetProvider.class); 

            //I left out the rest of the pending update code as it is irrelevant to this.
        }
    }


    //Next the AppWidgetProvider is called
    public class MailWidgetProvider extends AppWidgetProvider {

        public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
                              int[] appWidgetIds) {

            ComponentName thisWidget = new ComponentName(context, 
                                   MailWidgetProvider.class);
            int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

            //This is the intent to open up and run the service
            Intent intent = new Intent(context.getApplicationContext(),                            
                                        MailWidgetUpdateService.class);

            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);

            context.startService(intent);
        }

    }

//Service Class
public class MailWidgetUpdateService extends Service {
    public void onStart(Intent intent, int startId) {
            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this
                    .getApplicationContext());

            int[] allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);

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

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

            //Loop through the IDs
            for (int widgetId : allWidgetIds) {

                int awid = widgetId;
                String str = Integer.toString(widgetId);

                String user_name = sp.getString(settings, str + "::" + "chosen_accout_string", "Loading...");
                Log.d(TRACKING_USERNAME, user_name);

                /*
                Issue Here, see explanation below
                */
 }

}

Хотя я обновляю свои общие настройки с помощью уникального идентификатора и соответствующих данных

String str = Integer.toString(appWidgetId); 
sp.putString(editor, str + "::" + "username", user_name);) 

Это будет выглядеть так: ("2749::username)

Всякий раз, когда я запускаю код в классе обслуживания для извлечения данных, он перебирает то, что ДОЛЖНО быть только 1 идентификатором виджета приложения (кажется, 2 в массиве по некоторым причинам), и извлекает данные.

Первый цикл ничего не тянет и либо дает неправильное значение по умолчанию (как загрузка... выше), либо нулевой указатель, если у меня нет значения по умолчанию.

Как получить данные в моем классе Service из общих настроек, когда кажется, что они передают более одного идентификатора виджета только для одного виджета?

0 ответов

Другие вопросы по тегам