Android 无法启动receiver java.lang.NullPointerException

Android 无法启动receiver java.lang.NullPointerException,android,android-widget,android-mediaplayer,Android,Android Widget,Android Mediaplayer,尝试制作一个小部件,从3个小部件中随机选取一个音频,并与小部件一起播放。得到一个错误“无法启动接收器”任何帮助将是伟大的 第40行=mp=MediaPlayer.create(context.getApplicationContext(),mfile[rnd.nextInt(NUM_SOUND_FILES)] 代码: 错误: 02-13 17:50:20.610: E/AndroidRuntime(2663): FATAL EXCEPTION: main 02-13 17:50:20.610:

尝试制作一个小部件,从3个小部件中随机选取一个音频,并与小部件一起播放。得到一个错误“无法启动接收器”任何帮助将是伟大的

第40行=mp=MediaPlayer.create(context.getApplicationContext(),mfile[rnd.nextInt(NUM_SOUND_FILES)]

代码:

错误:

02-13 17:50:20.610: E/AndroidRuntime(2663): FATAL EXCEPTION: main
02-13 17:50:20.610: E/AndroidRuntime(2663): java.lang.RuntimeException: Unable to start receiver com.app.test: java.lang.NullPointerException
02-13 17:50:20.610: E/AndroidRuntime(2663):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2431)
02-13 17:50:20.610: E/AndroidRuntime(2663):     at     android.app.ActivityThread.access$1500(ActivityThread.java:141)
02-13 17:50:20.610: E/AndroidRuntime(2663):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1332)
02-13 17:50:20.610: E/AndroidRuntime(2663):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-13 17:50:20.610: E/AndroidRuntime(2663):     at android.os.Looper.loop(Looper.java:137)
 02-13 17:50:20.610: E/AndroidRuntime(2663):    at android.app.ActivityThread.main(ActivityThread.java:5103)
 02-13 17:50:20.610: E/AndroidRuntime(2663):    at java.lang.reflect.Method.invokeNative(Native Method)
 02-13 17:50:20.610: E/AndroidRuntime(2663):    at java.lang.reflect.Method.invoke(Method.java:525)
 02-13 17:50:20.610: E/AndroidRuntime(2663):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
 02-13 17:50:20.610: E/AndroidRuntime(2663):    at      com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
 02-13 17:50:20.610: E/AndroidRuntime(2663):    at dalvik.system.NativeStart.main(Native Method)
 02-13 17:50:20.610: E/AndroidRuntime(2663): Caused by: java.lang.NullPointerException
 02-13 17:50:20.610: E/AndroidRuntime(2663):    at com.app.test.MyWidget.onReceive(MyWidget.java:40)
 02-13 17:50:20.610: E/AndroidRuntime(2663):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2424)
 02-13 17:50:20.610: E/AndroidRuntime(2663):    ... 10 more

第一次查看时,我看到-mp.reset()在检查mp是否为null之前被调用。

context
null
@此行:

  mp=MediaPlayer.create(context.getApplicationContext(), mfile[rnd.nextInt(NUM_SOUND_FILES)]);
      final String action = intent.getAction();
尝试只使用
上下文

  mp=MediaPlayer.create(context, mfile[rnd.nextInt(NUM_SOUND_FILES)]);
      final String action = intent.getAction();
更新:

请参见此示例,将文件夹
/raw
创建到
/res
并粘贴.mp3文件,此示例使用
/res/raw/mysong.mp3
文件

private static MediaPlayer mp;



  @Override
      public void onReceive(Context context, Intent intent)
      {
          if (mp == null)
              mp = MediaPlayer.create(context.getApplicationContext(), R.raw.mysong);

          final String action = intent.getAction();

          if (ACTION_WIDGET_RECEIVER.equals(action)) {
               if (mp.isPlaying())
               {
                   mp.stop();
                   mp.release();
                   mp = MediaPlayer.create(context.getApplicationContext(), R.raw.mysong);

               }
                else
                    mp.start();

           }
          super.onReceive(context, intent);
         }
      }
              super.onReceive(context, intent);
    }


  @Override
  public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
       RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
       Intent active = new Intent(context, HappyBabyWidget.class);
       active.setAction(ACTION_WIDGET_RECEIVER);
       PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
       remoteViews.setOnClickPendingIntent(R.id.ButtonPlay, actionPendingIntent);
       appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
  }

在哪里初始化MPT错误在MyWidget第40行是的,我知道但不确定有什么问题,感谢您的帮助:)mp=MediaPlayer.create(context.getApplicationContext(),mfile[rnd.nextInt(NUM_SOUND_FILES)];谢谢你的尝试:)但是在getApplicationContext()下得到这个错误,方法getApplicationContext()对于MyWidget类型是未定义的。我意识到你正在使用一个小部件,只使用上下文。嘿,谢谢你的工作,因为我没有得到错误,但是现在小部件没有显示,只是出现了“加载小部件的问题”你知道如何解决这个问题吗?这将是另一个与此无关的问题,请首先尝试让你的小部件正常工作,然后实现MediaPlayer。例如,尝试在onReceive()方法中使用LogCat添加Log.i(“myCLASSNAME”,“激发onReceive()”);
private static MediaPlayer mp;



  @Override
      public void onReceive(Context context, Intent intent)
      {
          if (mp == null)
              mp = MediaPlayer.create(context.getApplicationContext(), R.raw.mysong);

          final String action = intent.getAction();

          if (ACTION_WIDGET_RECEIVER.equals(action)) {
               if (mp.isPlaying())
               {
                   mp.stop();
                   mp.release();
                   mp = MediaPlayer.create(context.getApplicationContext(), R.raw.mysong);

               }
                else
                    mp.start();

           }
          super.onReceive(context, intent);
         }
      }
              super.onReceive(context, intent);
    }


  @Override
  public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
       RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
       Intent active = new Intent(context, HappyBabyWidget.class);
       active.setAction(ACTION_WIDGET_RECEIVER);
       PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
       remoteViews.setOnClickPendingIntent(R.id.ButtonPlay, actionPendingIntent);
       appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
  }