2017-07-19 28 views
2

我知道這聽起來很瘋狂,我聽起來很愚蠢,但我現在測試了20次,我對此沒有其他解釋,也許我做了一件非常錯誤的事情,或者我不知道。Android studio錯誤,通過添加Log.d修復?

好吧,我正在創建一個小部件,它使用Realm數據庫從中加載數據。我在應用程序級聲明瞭Realm默認配置:

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

然後我在MainActivity中向Realm添加一些信息。我有運行RemoteViewsService的窗口小部件提供程序來加載來自領域的數據並將其放入RemoteViewsFactory中。這裏是RemoteViewsService,其中有趣的部分是:

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

} 

所以你看到那Log.d("myResLength", " "+ myResLength);?我不知道爲什麼,但小部件只是顯示沒有它沒有數據加載。更重要的是,如果沒有Log.d,Android Monitor會顯示編譯器simpy會在整個循環之後跳過整個循環。我不知道這是Android bug,Realm bug還是我的無知,但這是數據在窗口小部件上加載的唯一方式。現在這對我來說似乎是不可靠的選擇,所以我需要一些關於它的解釋。

+1

你需要**在'onGetViewFactory'中調用'Realm.init()'嗎?因爲這意味着一些超級棘手的事情正在發生,例如多進程。 – EpicPandaForce

回答

0

繼@EpicPandaForce的回答後,我從服務中刪除了Realm.init(),現在它工作的很好。謝謝!