кнопка виджета Android падает - PullRequest
0 голосов
/ 10 февраля 2012

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

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);


}

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

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

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

1 Ответ

0 голосов
/ 11 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...