Сбои кнопок виджета Android

Я делаю виджет с тремя кнопками. Мне нужно вызвать функцию для каждой кнопки. я делаю вот так:

public class myWidget extends AppWidgetProvider {


@Override
public void onReceive(Context context, Intent intent) {

 final String action = intent.getAction();
 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 {
 // check, if our Action was called
 if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) {
 String msg = "null";
 try {
 msg = intent.getStringExtra("msg");

 if(msg.equals("nextpage"))
 callFunction1();

 if(msg.equals("prevpage"))
 callFunction2();

 if(msg.equals("ref")) 
 callfunction3();
 } catch (NullPointerException e) {

 }
 }

 super.onReceive(context, intent);
 }
}

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



 remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
 this.appWidgetManager = appWidgetManager;
 thisWidget = new ComponentName(context, SteauaWidget.class);

 Intent active = new Intent(context, MyWidget.class);
 active.setAction(ACTION_WIDGET_RECEIVER);
 active.putExtra("msg", "ref");

 PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 1, active, 0);

 remoteViews.setOnClickPendingIntent(R.id.button3, actionPendingIntent);

 Intent nextPage = new Intent(context, MyWidget.class);
 nextPage.setAction(ACTION_WIDGET_RECEIVER);
 nextPage.putExtra("msg", "nextpage");

 PendingIntent pendingNextPage = PendingIntent.getBroadcast(context, 2, nextPage, 0);

 remoteViews.setOnClickPendingIntent(R.id.button2, pendingNextPage);

 Intent prevPage = new Intent(context, MyWidget.class);
 prevPage.setAction(ACTION_WIDGET_RECEIVER);
 prevPage.putExtra("msg", "prevpage");

 PendingIntent pendingPrevPage = PendingIntent.getBroadcast(context, 3, prevPage, 0);

 remoteViews.setOnClickPendingIntent(R.id.button1, pendingPrevPage);


}

но мой виджет падает с этим сообщением в logcat:

java.lang.RuntimeException: невозможно запустить приемник my.widget.MyWidget: java.lang.NullPointerException

в чем проблема?

1 ответ

Kaediil прав, вам нужно сузить точку отказа, поставив инструкции Log.d() на весь ваш код. Я вижу довольно много мест, где указатель все еще может быть нулевым и, таким образом, бросает ошибку. Строка: thisWidget = new ComponentName (контекст, SteauaWidget.class); выглядит странно. Кроме того, поскольку ошибка конкретно упоминает my.widget.MyWidget, это означает, что MyWidget.class не получает экземпляр правильно или не получает время для завершения загрузки, создавая, таким образом, следующее исключение NullPointerException.

licensed under cc by-sa 3.0 with attribution.