簡體   English   中英

從手機運行時應用程序崩潰但從計算機啟動時工作正常

[英]App crashes when run from phone but works fine when launched from computer

經過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();
}

所以這不是一個完整的超級答案,但我已經能夠通過更改checkForNewBooking()中的第一個if語句來修復此錯誤。 現在它是:

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

代替

if(extras != null)

我真的不知道為什么程序開始這個..我發布的部分是主要部分,在開始時啟動,所以信息不是來自那里。 根據我之前留下的評論,此方法旨在檢查過去是否已完成預訂,這意味着預訂完成后,BOOKING_DATE和BOOKING_TIME所需的信息可能來自另一種方法。

無論如何,它現在有效! 謝謝大家的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM