2016-01-08 15 views
7

Sono riuscito dopo 3 giorni di lavoro a far funzionare una vecchia app sul mio dispositivo! Ma solo quando il comando viene dal mio computer ...L'app si blocca quando viene eseguita dal telefono ma funziona correttamente quando viene avviata dal computer

Spiego. Quando lancio l'app da Android Studio sul mio telefono, si avvia correttamente, il che è fantastico. Ma quando lo avvio direttamente dal mio telefono, ricevo in Catlog che una stringa è nulla. Non capisco cosa potrebbe causare questo .. Funziona bene quando l'app viene avviata dal mio computer ma non dal telefono ...

Per favore, aiuto!

Modifica 1: Aggiungere attività 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"/> 

Modifica 2: Protocollo errori

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)  

Edit 3: Aggiungere una parte del codice che contiene gli errori

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

Modifica 4: altro codice. Ecco il metodo onCreate(). La chiamata per il metodo checkForNewBooking() viene da lì.

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(); 
} 
+0

per favore includere almeno le dichiarazioni di attività manifest e la configurazione di esecuzione che usi sul computer per avviare l'app –

+0

L'emulatore e il dispositivo utilizzano lo stesso sistema operativo? – AdamMc331

+0

La configurazione di esecuzione è la più predefinita che può essere. La distribuzione e il lancio sono impostati su default con nessun flag di installazione o flag di avvio. Per l'emulatore, non ne eseguo nessuna, dal computer, si avvia direttamente sul mio dispositivo. – dequec64

risposta

1

quindi non è una grande risposta super-completo, ma sono stato in grado di risolvere questo bug semplicemente cambiando la prima istruzione if nel checkForNewBooking(). Ora è:

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

invece di

if(extras != null) 

Ho seriamente non so perché il programma è iniziato con questo .. La classe che ho postato parti del è quello principale, lanciando al via e così le informazioni non vengono da lì. Secondo i commenti che il ragazzo prima di me ha lasciato, questo metodo ha lo scopo di verificare se una prenotazione è stata completata in passato, il che significa forse che le informazioni richieste per BOOKING_DATE e BOOKING_TIME provengono da un altro metodo una volta che una prenotazione è stata completata.

In ogni caso, ora funziona! Grazie a tutti per l'aiuto!

Problemi correlati