2017-07-19 3 views
2

Ich weiß, es hört sich verrückt an und ich stöhne dumm, aber ich habe es jetzt 20 mal getestet und ich habe keine andere Erklärung darüber, vielleicht mache ich etwas sehr falsch oder weiß es nicht.Android Studio Bug, behoben durch Hinzufügen von Log.d?

Ok Ich erstelle ein Widget, das Realm-Datenbank verwendet, um Daten zu laden. Ich habe die Realm Standardkonfiguration auf Anwendungsebene deklariert:

public class MyApp extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Realm.init(this); 
     RealmConfiguration realmConfiguration = new RealmConfiguration.Builder().build(); 
     Realm.setDefaultConfiguration(realmConfiguration); 
    } 
} 

Dann füge ich ein paar Informationen zu dem Realm im MainActivity. Ich habe Widget-Provider, die RemoteViewsService ausführen, um die Daten aus dem Realm zu laden und in die RemoteViewsFactory zu legen. Hier ist die RemoteViewsService, wo der interessante Teil ist:

public class MyWidService extends RemoteViewsService { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
    } 

    @Override 
    public MyWidFactory onGetViewFactory(Intent intent) { 
     Log.d("MyWidService", " onGetViewFactory()<<<<<<<<<<"); 
     final Context context = getApplicationContext(); 
     Realm.init(context); 
     Realm realm = Realm.getDefaultInstance(); 
     realm.isAutoRefresh(); 
     ArrayList<String> myList = new ArrayList<>(); 
     RealmResults<Task> myResults = realm.where(Task.class).findAll(); 
     final int myResLength = myResults.size(); 
     Log.d("myResLength", " "+ myResLength); 
     for(int j = 0; j<myResLength; j++){ 
      myList.add(myResults.get(j).getTaskText()); 
      Log.d("tasks", " " + myList.get(j)); 
     } 
     return new MyWidFactory(context, intent, myList); 
    } 

} 

Sie sehen also, dass Log.d("myResLength", " "+ myResLength);? Ich weiß nicht warum, aber das Widget zeigt einfach, dass keine Daten ohne es geladen sind. Außerdem zeigt Android Monitor ohne Log.d, dass der Compiler simpy das Ganze für den Zyklus danach überspringt. Ich weiß nicht, ob das ein Android-Bug, Realm-Bug oder meine Ignoranz ist, aber das ist der einzige Weg, wie die Daten auf das Widget geladen werden. Nun, das erscheint mir unzuverlässig, also brauche ich eine Erklärung dazu.

+1

Müssen Sie ** Realm.init() 'in' onGetViewFactory' aufrufen? Denn das würde bedeuten, dass Super-Tricky passiert, zum Beispiel Multi-Prozess. – EpicPandaForce

Antwort

0

Die Antwort von @EpicPandaForce folgend, entfernte ich Realm.init() vom Dienst und es funktionierte jetzt gut. Vielen Dank!