Re-Initialisierung Twitter Fabric nach langem Leerlauf Zeit Android App

So hat meine Android-App die folgenden Komponenten: eine LoginActivity, eine MainActivity, die eine Navigations-Schublade verwendet, eine Reihe von verschiedenen Fragmenten, die von der Nav-Schublade in Main Activity behandelt werden.

In der LoginActivity setze ich TwitterAuthConfig ein und füge auch das in Fabric.with (…. Twitter (authConfig) …), was grundsätzlich das tut, was sie in der Dokumentation sagen: Fabric integration documentation

  • Android: Lassen Sie Benutzer Bild oder Video aus der Galerie auswählen
  • Warum Android Studio sagt "Warten auf Debugger", wenn ich nicht debugging?
  • Wo befindet sich der Android SDK Ordner?
  • Google IO Rest Design Muster, Fertige ContentProvider und stecken jetzt
  • TextView lineSpacingMultiplier weniger als null Koteletts letzte Zeile
  • Stoppen und Starten von Musik bei eingehenden Anrufen
  • Nachdem der Benutzer durch LoginActivity navigiert und sich erfolgreich anmeldet, geht es zu Main Activity, die die Navigationsschublade öffnet und sie wählt, welches Fragment sie wollen. Die LoginActivity ruft this.finish () nach dem Start der MainActivity auf.

    Mein Problem ist, dass eines der Fragmente Ich habe eine Embedded Twitter Timeline, die Fabric Authentifizierung über die Fabric.with () Anruf benötigt. Dies funktioniert das erste Mal, aber sobald ich die App verlasse und es bleibt im Hintergrund für eine Weile, glaube ich onDestroy () wird angerufen und dann wird die Fabric-Instanz entfernt.

    Deshalb, wenn ich es wieder aus dem Hintergrund wieder öffnet, hat es folgende Fehlermeldung:

    07-09 15:59:55.179 7933-7933/com.writers.myapp E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.writers.myapp, PID: 7933 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.writers.myapp/com.writers.myapp.MainActivity}: java.lang.IllegalStateException: Must Initialize Fabric before using singleton() at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2329) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389) at android.app.ActivityThread.access$900(ActivityThread.java:147) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) 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:898) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) Caused by: java.lang.IllegalStateException: Must Initialize Fabric before using singleton() at io.fabric.sdk.android.Fabric.singleton(Fabric.java:265) at io.fabric.sdk.android.Fabric.getKit(Fabric.java:516) at com.twitter.sdk.android.tweetui.TweetUi.checkInitialized(TweetUi.java:120) at com.twitter.sdk.android.tweetui.TweetUi.getInstance(TweetUi.java:69) at com.twitter.sdk.android.tweetui.TwitterListTimeline$Builder.<init>(TwitterListTimeline.java:108) at com.myapp.newstimeline.TimelineFragment.onCreateView(TimelineFragment.java:49) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1120) at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1929) at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220) at android.app.Activity.performStart(Activity.java:5949) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389) at android.app.ActivityThread.access$900(ActivityThread.java:147) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) 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:898) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 07-09 15:59:55.203 775-1192/? W/ActivityManager﹕ Force finishing activity com.writers.myapp/.MainActivity 

    Irgendeine Idee, wie man dieses Problem beheben kann?

    • Sollte ich eine zusätzliche Fabric.with () – Anweisung in MainActivity hinzufügen?
    • Soll ich IllegalStateException fangen? Wenn ja, wo?
    • Bin ich das alles falsch?

    Vielen Dank für Ihre Hilfe im Voraus!

  • Holen Sie Bitmap an ImageView
  • Wie man die Scroll-Position der Listenansicht pflegt, wenn sie aktualisiert wird
  • Wie lasse ich einen Benutzer Dateien in den internen Speicher hochladen?
  • DeviceReady funktioniert nicht in PhoneGap-Anwendung, wie?
  • Nicht in der Lage, runOnUiThread in einem Thread aus dem Inneren eines Dienstes aufrufen
  • Wie kann ich TypefaceSpan oder StyleSpan mit einem benutzerdefinierten Typeface verwenden?
  • 2 Solutions collect form web for “Re-Initialisierung Twitter Fabric nach langem Leerlauf Zeit Android App”

    Ich würde vorschlagen, dass Sie eine BaseActivity und alle Ihre Aktivitäten erweitern, dass BaseActivity .

    In onCreate Funktion dieser Basis, initialisieren Fabric Instanz, wenn es nicht so initialisiert wird:

     public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!Fabric.isInitialized()) { Fabric.with(....Twitter(authConfig)...) } //Do other stuff. } 

    Auf diese Weise werden Sie sicherstellen, dass es immer initialisiert ist.

    Gewebe hat eine statische Methode namens isInitialized (). So ist die Lösung zu überprüfen, ob Stoff initialisiert wird vor dem Laden von Twitter Timeline.

    Beispiel:

     if (!Fabric.isInitialized()) { TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY,TWITTER_SECRET); Fabric.with(getActivity(), new Twitter(authConfig)); } // load Twitter Timelines 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.