В чем здесь проблема?
Проблема в том, что вы концентрируетесь на «результате», а не на «причине».
Трудно диагностировать проблему, когда вы дали только небольшой пример кода, и, что не менее важно, причина, по которой вы видите «сбой», заключается в том, что вы закомментировали блок try / catch.
Насколько я могу интерпретировать из этого небольшого примера кода, если вы иногда видите исключение NullPointerException, это может быть только потому, что mycontext.getSharedPreferences () возвращает 'null'. В этом случае все, что предполагается сохранить, не работает.
Взгляните на свой код, который сохраняет настройки - я подозреваю, что именно в этом и заключается ответ.
РЕДАКТИРОВАТЬ: ОК, глядя на код, который вы указали в ответе (он действительно должен был быть отредактирован в вашем вопросе).
Здесь есть только один вызов saveStringValue () ...
private static void loadmm(RemoteViews updateViews, Context context, int appWidgetId) {
String now_date=getFullHungaryDate();
String mm="";
boolean error=false;
if (isInternetOn()) {
// try {
mm=getALL();
if (!mm.equals("")) {
String frissitve=now_date+" "+getTime();
updateViews.setTextViewText(R.id.mm, Html.fromHtml(mm));
updateViews.setTextViewText(R.id.ma, "Fr. "+frissitve);
saveStringValue("frissitve", frissitve, context);
}
...
}
}
... и здесь есть только один вызов loadStringValue () ...
private static String getALL() {
String sOut = "";
String sOutAll = "<br>";
Boolean err = false;
HttpStringCutter Cutter = new HttpStringCutter();
Calendar calendar = Calendar.getInstance();
int hnow=calendar.get(Calendar.HOUR_OF_DAY);
if (hnow>1) hnow--;
String hour=Integer.toString(hnow);
String min=Integer.toString(calendar.get(Calendar.MINUTE));
String LISTAZAS =loadStringValue("listazas", mycontext);
...
}
Первый сохраняет «frissitve», а второй загружает «listazas», так что до сих пор неясно, в чем проблема. Я хочу подчеркнуть, что если «иногда» вы получаете NullPointerException при использовании settings.getString () в loadStringValue (), то единственной причиной может быть то, что saveStringValue () ранее не вызывался для сохранения этой строки. Вам нужно посмотреть, почему это иногда случается.