从手机运行时应用程序崩溃但从计算机启动时工作正常

时间:2016-01-08 20:33:05

标签: java android string android-studio null

经过3天的工作,我已经能够在我的设备上运行旧应用了!但只有当命令来自我的电脑......

我解释一下。当我在手机上从Android Studio启动应用程序时,它启动很好,这很棒。但是当我直接从我的手机启动它时,我在Catlog中得到一个String为null。我不明白是什么原因造成这种情况..当我的电脑启动应用程序而不是通过手机启动应用程序时,它可以正常运行...

请帮忙!

编辑1 :添加AndroidManifest.xml活动

<activity android:name=".LoginActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    <activity android:name=".ManageAccountActivity"/>
    <activity android:name=".RegionListActivity"/>
    <activity android:name=".ClubListActivity"/>
    <activity android:name=".SearchActivity"/>
    <activity android:name=".TeetimesListActivity"/>
    <activity android:name=".ConfirmationActivity"/>
    <activity android:name=".TermsAndConditionsActivity"/>
    <activity android:name=".TabletSearchActivity"/>
    <activity android:name=".TabletConfirmationActivity"/>
    <activity android:name=".PreferencesActivity"/>

编辑2 :错误日志

01-08 16:08:47.194 26704-26704/ca.gggolf.aminutegolf E/ACRA: ACRA caught a RuntimeException for ca.gggolf.aminutegolf
                                                         java.lang.RuntimeException: Unable to start activity ComponentInfo{ca.gggolf.aminutegolf/ca.gggolf.aminutegolf.LoginActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] java.lang.String.split(java.lang.String)' on a null object reference
                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
                                                             at android.app.ActivityThread.access$800(ActivityThread.java:155)
                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
                                                             at android.os.Handler.dispatchMessage(Handler.java:102)
                                                             at android.os.Looper.loop(Looper.java:135)
                                                             at android.app.ActivityThread.main(ActivityThread.java:5343)
                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                             at java.lang.reflect.Method.invoke(Method.java:372)
                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
                                                          Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] java.lang.String.split(java.lang.String)' on a null object reference
                                                             at ca.gggolf.aminutegolf.LoginActivity.checkForNewBooking(LoginActivity.java:676)
                                                             at ca.gggolf.aminutegolf.LoginActivity.onCreate(LoginActivity.java:112)
                                                             at android.app.Activity.performCreate(Activity.java:6010)
                                                             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) 
                                                             at android.app.ActivityThread.access$800(ActivityThread.java:155) 
                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
                                                             at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                             at android.os.Looper.loop(Looper.java:135) 
                                                             at android.app.ActivityThread.main(ActivityThread.java:5343) 
                                                             at java.lang.reflect.Method.invoke(Native Method) 
                                                             at java.lang.reflect.Method.invoke(Method.java:372) 
                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 

编辑3 :添加包含错误的部分代码

private void checkForNewBooking() {
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        final String numConfirmation = extras.getString("NEWLY_BOOKED");
        final String date[] = extras.getString("BOOKING_DATE").split("-"); //line 676
        final String time[] = extras.getString("BOOKING_TIME").split(":");
        final String club = extras.getString("BOOKING_CLUB");
        final int hole = Integer.parseInt(extras.getString("BOOKING_HOLE"));

编辑4 :更多代码。这是onCreate()方法。方法checkForNewBooking()的调用来自那里。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);
    Log.d(TAG, "onCreate()");

    mController = new ActivityController(this);

    // Setting server mode
    ((Globals) getApplication()).setServerInformation(SharedPrefManager.getServer(this));

    // Hide auto-triggered keyboard
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    if (SharedPrefManager.isFirstRun(LoginActivity.this)) {
        SharedPrefManager.setFirstTimePrefs(LoginActivity.this, Utility.retreiveLanguage());
        Log.d(TAG, "First run triggered.");
    }

    Bundle mBundle = getIntent().getExtras();
    if (mBundle != null) {
        if (mBundle.getBoolean("PROCESS_KILLED")) {
            Toast.makeText(LoginActivity.this, R.string.ui_error_killedprocess, Toast.LENGTH_LONG).show();
        } else {
            checkForNewBooking();
        }
    }
    initializeUI();

    WrappedLogger.setProvider(new LoggingProvider());
    WrappedLogger.setMemoryLog(false);
    IPAddressInformation.getInstance().getIPAddress();
}

1 个答案:

答案 0 :(得分:1)

所以它不是一个完整的超级答案,但我已经能够通过更改checkForNewBooking()中的第一个if语句来修复此错误。 现在是:

if(extras.getString("BOOKING_DATE") != null)

而不是

if(extras != null)

我真的不知道为什么这个程序是从这个开始的..我发布的部分是主要部分,在开始时发布,所以信息不是来自那里。根据我之前的评论,这个方法是为了检查过去是否已完成预订,这意味着预订完成后,BOOKING_DATE和BOOKING_TIME所需的信息可能来自另一种方法。

无论如何,它现在有效!谢谢大家的帮助!