【问题标题】:Android - Null Array. Runs in Android Studio emulator but not on real device when unpluggedAndroid - 空数组。在 Android Studio 模拟器中运行,但在拔下电源时不在真实设备上运行
【发布时间】:2016-11-25 05:22:55
【问题描述】:

我一直在通过我的三星 S7 手机(API 23 和 6.0.1)在 Android Studio 模拟器中测试我的应用,它运行良好。当我从笔记本电脑上拔下它并运行应用程序时,它崩溃了。

我的 logcat 说我正在尝试调用一个空数组...但它不是空的?我不明白为什么当我通过 Android Studio 将应用程序运行到我的手机时一切正常,但是当我单独运行它时它会崩溃。感谢您的帮助!

这是我的日志

FATAL EXCEPTION: main
Process: com.example.abc.def, PID: 28693
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.abc.def/com.example.abc.def.MainActivity}: java.lang.NullPointerException: Attempt to read from null array
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.NullPointerException: Attempt to read from null array
at com.example.abc.def.MainActivity.onCreate(MainActivity.java:49)
at android.app.Activity.performCreate(Activity.java:6876)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:158) 
at android.app.ActivityThread.main(ActivityThread.java:7224) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

这是我的代码。当我调用 btn1.setText(itemArray[0]) 时,问题出现在底部,因为数组是“null”

public class MainActivity extends AppCompatActivity {

Button btn1, btn2;
String btn1Name, btn2Name;
String btnValue = "", itemValue = "", itemPosition = "";
String[] buttonArray = new String[]{"blank", "blank"};
String[] itemArray = new String[]{"blank", "blank"};
String[] positionArray = new String[]{"blank", "blank"};  

@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn1 = (Button) findViewById(R.id.button1);
    btn2 = (Button) findViewById(R.id.button2);

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        btnValue = extras.getString("btnValue");
        itemValue = extras.getString("itemValue");
        itemPosition = extras.getString("itemPosition");

        buttonArray = extras.getStringArray("buttonArray");
        itemArray = extras.getStringArray("array");
        positionArray = extras.getStringArray("positionArray");

        if (btnValue != null && btnValue.equals("btn1")){
            buttonArray[0] = btnValue;
            itemArray[0] = itemValue;
            positionArray[0] = itemPosition;
        } else if (btnValue != null && btnValue.equals("btn2")) {
            buttonArray[1] = btnValue;
            itemArray[1] = itemValue;
            positionArray[1] = itemPosition;
        }
    }

    btn1.setText(itemArray[0]);
    btn2.setText(itemArray[1]);
}
}

【问题讨论】:

  • "extras.getString("itemValue")" & "itemArray = extras.getStringArray("array");" 返回什么?
  • @AdeelShahzad 它来自另一个活动。我认为这与我的代码没有任何关系,因为当我启动应用程序时“附加”应该为空。 itemArray[0] 和 [1] 在活动启动时已分配给“空白”。
  • 能否请您在传递这些额外内容的地方发布其他课程代码?
  • @AdeelShahzad 刚刚添加。谢谢
  • 这只是我的看法,“extras.getStringArray("array");"正在返回 null。不过,我可能是错的。在该语句上放置一个断点并计算该表达式

标签: android arrays null emulation device


【解决方案1】:

我在这里猜测,但 MainActivity 是项目中的第一个活动吗?

我认为您编写了代码来处理返回此活动以及来自其他活动的数据。我刚刚尝试过,getIntent().getExtras() 在第一次在模拟器上创建活动时返回 null。 然而,当我在我的设备上运行它时,getIntent 产生了这个异常。

注意 onCreate 被调用一次,所以如果你想查看另一个活动的结果,请查看How to manage `startActivityForResult` on Android?。

【讨论】:

    猜你喜欢
    • 2017-05-01
    • 2016-09-02
    • 2013-07-12
    • 1970-01-01
    • 2019-12-13
    • 2021-08-07
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多