【问题标题】:Passing Data with Intents crashes app android使用 Intents 传递数据会使应用程序 android 崩溃
【发布时间】:2014-04-08 14:14:50
【问题描述】:

当我尝试使用 Intent 传递一些数据时,为什么我的应用会崩溃?

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

为什么会这样? 我的日志猫:

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

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

【问题讨论】:

  • RMpro 类中的第 37 行是哪一行?
  • 我认为通过PATH 传递的`R.raw.s14projectil` 是一个整数而不是字符串
  • 第 37 行是 `final String C1 = getIntent().getStringExtra("PATH").trim();` 那么我应该怎么做呢?如何更改?

标签: android android-intent crash


【解决方案1】:

您应该始终检查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();
    ....
}

此外,当您将数据放入您的Intent 并稍后使用getStringExtra 检索它时,您应该确保您放入了StringR.raw.s14projectil 的值始终为 int。如果s14projectil是有数据的文件,首先打开InputStream读取:

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

只有在此之后将内容传递给意图。

【讨论】:

  • intent.putExtra("PATH", String.valueOf(R.raw.s14projectil)); 这修复了它。现在它可以正常工作了。谢谢大佬
【解决方案2】:

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

intent.putExtra("PATH", R.raw.s14projectil);

然后尝试检索一个字符串:

final String C1 = i.getStringExtra("PATH").trim();

这就是你得到NullPointerException的原因

【讨论】:

    【解决方案3】:

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

    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 活动中:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多