Android – 错误打开跟踪文件:没有这样的文件或目录

我得到了一个奇怪的错误列表,有些看似断开连接,但我无法分辨,因为我甚至无法将我的应用程序加载到调试中。 这是一个非常简单的应用程序,一个广播组中的3个单选按钮,每个按钮都会触发一首不同的歌曲。

我将首先发布我的Manifest,我的活动文件和布局,然后发布错误日志。

表现:

        >   

LayoutActivity:

 package com.cis298.lab2; import java.io.IOException; import com.cis298.lab2.R; import android.app.Activity; import android.os.Bundle; import android.media.MediaPlayer; import android.widget.RadioGroup; public class LayoutActivity extends Activity { int song; MediaPlayer mediaplayer = MediaPlayer.create(this, song); public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.layout); try { mediaplayer.prepare(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } RadioGroup radgrp = (RadioGroup) findViewById(R.id.radiogroup); radgrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId){ case R.id.dance: song = R.raw.redalert; mediaplayer.start(); break; case R.id.rap: song = R.raw.cannedheat; break; case R.id.rock: song = R.raw.movmou8105; break;} } }); } } 

布局:

         

日志:

02-21 20:34:05.044:D / AndroidRuntime(322):关闭VM 02-21 20:34:05.044:W / dalvikvm(322):threadid = 1:线程退出未捕获exception(组= 0x4001d800)02 -21 20:34:05.094:E / AndroidRuntime(322):FATAL EXCEPTION:main 02-21 20:34:05.094:E / AndroidRuntime(322):java.lang.RuntimeException:无法实例化活动ComponentInfo {com.cis298 .lab2 / com.cis298.lab2.LayoutActivity}:java.lang.NullPointerException 02-21 20:34:05.094:E / AndroidRuntime(322):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)02- 21 20:34:05.094:E / AndroidRuntime(322):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)02-21 20:34:05.094:E / AndroidRuntime(322):在android.app。 ActivityThread.access $ 2300(ActivityThread.java:125)02-21 20:34:05.094:E / AndroidRuntime(322):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)02-21 20:34 :05.094:E / AndroidRuntime(322):在android.os.Handler.dispatchMessage(Handler.java:99)02-21 20 :34:05.094:E / AndroidRuntime(322):在android.os.Looper.loop(Looper.java:123)02-21 20:34:05.094:E / AndroidRuntime(322):在android.app.ActivityThread。 main(ActivityThread.java:4627)02-21 20:34:05.094:E / AndroidRuntime(322):at java.lang.reflect.Method.invokeNative(Native Method)02-21 20:34:05.094:E / AndroidRuntime (322):at java.lang.reflect.Method.invoke(Method.java:521)02-21 20:34:05.094:E / AndroidRuntime(322):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller。 run(ZygoteInit.java:868)02-21 20:34:05.094:E / AndroidRuntime(322):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)02-21 20:34: 05.094:E / AndroidRuntime(322):at dalvik.system.NativeStart.main(Native Method)02-21 20:34:05.094:E / AndroidRuntime(322):引起:java.lang.NullPointerException 02-21 20: 34:05.094:E / AndroidRuntime(322):在android.content.ContextWrapper.getResources(ContextWrapper.java:80)02-21 20:34:05.094:E / AndroidRuntime(322):在android.media.MediaPlayer.create (MediaPlayer.java:641) 02-21 20:34:05.094:E / AndroidRuntime(322):at com.cis298.lab2.LayoutActivity。(LayoutActivity.java:15)02-21 20:34:05.094:E / AndroidRuntime(322):at java .lang.Class.newInstanceImpl(Native Method)02-21 20:34:05.094:E / AndroidRuntime(322):at java.lang.Class.newInstance(Class.java:1429)02-21 20:34:05.094: E / AndroidRuntime(322):在android.app.Instrumentation.newActivity(Instrumentation.java:1021)02-21 20:34:05.094:E / AndroidRuntime(322):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java :2577)02-21 20:34:05.094:E / AndroidRuntime(322):… 11更多

任何帮助将不胜感激。

尝试移动mediaplayer = MediaPlayer.create(this, song);onCreate()里面。

由于活动在onCreate()之前没有完全初始化,这可能是NPE的原因。

但是 ,下一个问题是您创建的MediaPlayer的歌曲最初为0 (当它是实例variables时,int的默认值为0 )。 因此,如果移动MediaPlayer.create解决 NPE,则下一个错误将是无法find资源。 因此,一旦song保持有用的东西,就调用MediaPlayer.create

也许这样的事情会起作用。

 public class LayoutActivity extends Activity { int song; MediaPlayer mediaPlayer; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.layout); RadioGroup radgrp = (RadioGroup) findViewById(R.id.radiogroup); radgrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId){ case R.id.dance: song = R.raw.redalert; break; case R.id.rap: song = R.raw.cannedheat; break; case R.id.rock: song = R.raw.movmou8105; break; } mediaplayer = MediaPlayer.create(LayoutActivity.this, song); try { mediaplayer.prepare(); mediaplayer.start(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } } 

如果歌曲没有在其他任何地方使用,你可以将它保持在onCheckedChanged()的范围内。