通过意图传递数据会使android应用程序崩溃

通过意图传递数据会使android应用程序崩溃,android,android-intent,crash,Android,Android Intent,Crash,当我试图传递一些有意图的数据时,为什么我的应用程序会崩溃 case 0: Intent intent=new Intent(context, RMpro.class); intent.putExtra("NAME", "Projectile!"); intent.putExtra("PATH", R.raw.s14projectil); intent.putExtra("FILE", "Pr

当我试图传递一些有意图的数据时,为什么我的应用程序会崩溃

 case 0:
             Intent intent=new Intent(context, RMpro.class);
             intent.putExtra("NAME", "Projectile!");
             intent.putExtra("PATH", R.raw.s14projectil);
             intent.putExtra("FILE", "Projectile.mp3");
             ((Activity)context).startActivity(intent);

             break;
在RMpro活动中:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ringtone);

  Intent i=this.getIntent();

       final  String C1 = getIntent().getStringExtra("PATH").trim();
       final  String A1 = getIntent().getStringExtra("NAME").trim();
       final  String B1 = getIntent().getStringExtra("FILE").trim();
Intent Rmintent= getIntent();
Bundle extras = Rmintent.getExtras();
final  String C1 = extras.getString("PATH").trim();
final  String A1 = extras.getString("NAME").trim();
final  String B1 = extras.getString("FILE").trim();
为什么会这样? 我的日志:

04-08 16:07:34.811: E/AndroidRuntime(1174): FATAL EXCEPTION: main
04-08 16:07:34.811: E/AndroidRuntime(1174): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mostpopularalarmringtones/com.mostpopularalarmringtones.RMpro}: java.lang.NullPointerException
04-08 16:07:34.811: E/AndroidRuntime(1174):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2266)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at android.app.ActivityThread.access$600(ActivityThread.java:150)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at android.os.Looper.loop(Looper.java:213)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at android.app.ActivityThread.main(ActivityThread.java:5225)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at java.lang.reflect.Method.invokeNative(Native Method)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at java.lang.reflect.Method.invoke(Method.java:525)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at dalvik.system.NativeStart.main(Native Method)
04-08 16:07:34.811: E/AndroidRuntime(1174): Caused by: java.lang.NullPointerException
04-08 16:07:34.811: E/AndroidRuntime(1174):     at com.mostpopularalarmringtones.RMpro.onCreate(RMpro.java:37)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at android.app.Activity.performCreate(Activity.java:5133)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
04-08 16:07:34.811: E/AndroidRuntime(1174):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2230)
04-08 16:07:34.811: E/AndroidRuntime(1174):     ... 11 more

我在这里做错了什么?为什么我的应用程序会崩溃?

您应该始终检查
getIntent()
的结果是否为
null

Intent i = getIntent();
if (i != null){
    final  String C1 = i.getStringExtra("PATH").trim();
    final  String A1 = i.getStringExtra("NAME").trim();
    final  String B1 = i.getStringExtra("FILE").trim();
    ....
}
此外,当您将数据放入您的
意图
,然后使用
getStringExtra
检索数据时,您应该确保已放入
字符串
R.raw.s14project
的值始终为
int
。如果
s14projectil
是包含数据的文件,则应首先通过打开
InputStream
来读取该文件:

InputStream raw = getResources().openRawResource(R.raw.s14projectil);

只有在这之后,才能将内容传递给intent。

您将
int
放入extras(
R.raw.s14projectal
int
的值):

intent.putExtra(“路径”,R.raw.s14项目)

然后尝试检索字符串:

最终字符串C1=i.getStringExtra(“路径”).trim()


这就是为什么您会得到
NullPointerException

使用此代码可能会对您有所帮助

Case 0:
Intent intent=new Intent(context, RMpro.class);
Bundle extra = new Bundle();
extra.putString("NAME", "Projectile!");
extra.putString("PATH", R.raw.s14projectil);
extra.putString("FILE", "Projectile.mp3");
intent.putExtras(extra);
((Activity)context).startActivity(intent);
在RMpro活动中:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ringtone);

  Intent i=this.getIntent();

       final  String C1 = getIntent().getStringExtra("PATH").trim();
       final  String A1 = getIntent().getStringExtra("NAME").trim();
       final  String B1 = getIntent().getStringExtra("FILE").trim();
Intent Rmintent= getIntent();
Bundle extras = Rmintent.getExtras();
final  String C1 = extras.getString("PATH").trim();
final  String A1 = extras.getString("NAME").trim();
final  String B1 = extras.getString("FILE").trim();

RMpro
类中,哪一行是第37行?我认为当您通过
PATH
传递它时,`R.raw.s14projectal`是一个整数而不是StringLine 37是`final String C1=getIntent().getStringExtra(“PATH”).trim();`那我该怎么办呢?如何更改它?
intent.putExtra(“PATH”,String.valueOf(R.raw.s14projectal))这修复了它。现在它的工作,因为它应该。谢谢你,伙计