2014-02-13 32 views
1

试图制作一个小部件,它将从3中挑选一个随机音频并使用小部件进行播放。 Getiing错误“无法启动接收器”任何帮助将是伟大的!无法启动接收器java.lang.NullPointerException

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

代码:

public class MyWidget extends AppWidgetProvider { 

    public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget"; 
    private MediaPlayer mp; 
    private final int NUM_SOUND_FILES = 3; //*****REPLACE THIS WITH THE ACTUAL NUMBER OF SOUND FILES YOU HAVE***** 
    private int mfile[] = new int[NUM_SOUND_FILES]; 
    private Random rnd = new Random(); 



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

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     mfile[0] = R.raw.sound04; //****REPLACE THESE WITH THE PROPER NAMES OF YOUR SOUND FILES 
     mfile[1] = R.raw.sound05; //PLACE THE SOUND FILES IN THE /res/raw/ FOLDER IN YOUR PROJECT***** 
     mfile[2] = R.raw.sound06; 

     if (mp == null) 
      mp=MediaPlayer.create(context.getApplicationContext(), mfile[rnd.nextInt(NUM_SOUND_FILES)]); 
     final String action = intent.getAction(); 

     if (ACTION_WIDGET_RECEIVER.equals(action)) { 
      if (mp.isPlaying()) 
       mp.stop(); 
      else 
       mp.start(); 

     } 
     super.onReceive(context, intent); 

} 

} 

错误:

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 
+0

你在哪里初始化MP – Aiapaec

+0

的错误是在进myWidget线40 – Aiapaec

+0

是的,我知道,但不知道什么不对的地方,感谢帮助寿:) – user2407147

回答

1

在第一次看我见 - mp.reset()在检查Mp是空完成之前被调用。

+0

我试图删除它,它仍然发生:/ – user2407147

1

contextnull @这一行:

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

尽量只使用context

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

更新:

看到这个例子中,创建一个文件夹/raw/res和粘贴一个.mp3文件,这个例子就是我们e /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); 
    } 
+0

感谢您尝试:)但在getApplicationContext()下得到此错误,方法getApplicationContext()未定义类型MyWidget – user2407147

+0

我意识到您正在使用一个小部件,只使用上下文。 – Jorgesys

+0

嘿,谢谢,因为我没有得到错误,但现在的小部件不显示,只是想出了“问题加载小部件” – user2407147

相关问题