Как получить данные общих настроек в классе 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 из общих настроек, когда кажется, что они передают более одного идентификатора виджета только для одного виджета?