2017-07-19 2 views
2

Je sais que ça a l'air fou et j'ai l'air stupide, mais je l'ai testé comme 20fois maintenant et je n'ai aucune autre explication à ce sujet, peut-être que je fais quelque chose de très mal ou je ne sais pas.Bug de studio Android, corrigé en ajoutant Log.d?

Ok Je crée un widget qui utilise la base de données Realm pour charger des données. J'ai la configuration par défaut de Realm a déclaré le niveau d'application:

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

Puis-je ajouter quelques informations au royaume dans le MainActivity. J'ai un fournisseur de widget qui exécute RemoteViewsService pour charger les données du domaine et les placer dans RemoteViewsFactory. Voici le RemoteViewsService, où la partie intéressante est:

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

} 

Vous voyez donc que Log.d("myResLength", " "+ myResLength);? Je ne sais pas pourquoi mais le widget montre simplement qu'il n'y a pas de données chargées sans cela. De plus, sans le Log.d, Android Monitor montre que le compilateur simpy saute le tout pour le cycle après. Je ne sais pas si c'est un bug Android, un bug Realm ou mon ignorance, mais c'est la seule façon que les données se chargent sur le widget. Maintenant, cela me semble une option peu fiable alors j'ai besoin d'explications à ce sujet.

+1

Avez-vous ** besoin ** d'appeler 'Realm.init()' dans 'onGetViewFactory'? Parce que cela signifierait que quelque chose de super difficile se passe, par exemple multi-processus. – EpicPandaForce

Répondre

0

Après la réponse de @EpicPandaForce, j'ai supprimé Realm.init() du Service et cela a bien fonctionné maintenant. Je vous remercie!