2012-02-10 8 views
0

私は3つのボタンを持つウィジェットをやっています。私はすべてのボタンのための関数を呼び出す必要があります。私はこのようなやっている:アンドロイドウィジェットボタンがクラッシュする

java.lang.RuntimeException:受信機my.widget.MyWidgetを開始できません:java.lang.NullPointerExceptionが

logcatでこのメッセージで

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


} 

が、私のウィジェットがクラッシュします

何が問題ですか?

+0

ヌルポインタはどのような行ですか?実際のlogcatを投稿してください。そこに何もないなら、私はLOGメッセージを入れ、クラッシュする場所を見ます。 – Kaediil

答えて

0

Kaediilが正しいとすれば、コード全体にLog.d()ステートメントを配置することで障害ポイントを絞り込む必要があります。ポインタがまだヌルになっている可能性があり、そのためにエラーが発生する場所がかなりあります。行: thisWidget =新しいコンポーネント名(context、SteauaWidget.class); が奇妙に見えます。また、エラーが具体的には my.widget.MyWidgetを記述しているため、MyWidget.classが正しくインスタンス化されていないか、ロードが完了していないため、次のNullPointerExceptionが生成されることがあります。

関連する問題