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

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!

  • Fehler: Fehler beim Auflösen: com.twitter.sdk.android:twitter:2.3.0 - Android Studio
  • Integrieren von FaceBook, Twitter, Social Networks in Android
  • Warum dieser Fehler '- Read-only-Anwendung kann nicht POST'
  • Fabric TwitterKit auf Xamarin
  • Android, wie man Social Sharing für nur Facebook und Twitter zu filtern?
  • Wie bekomme ich Benutzerinformationen von twitter in android app?
  • Twitter Stoff oder inoffizielle Twitter4j?
  • Android konnte diese App nicht im PackageManager io.crash.air finden
  • 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.