我知道這聽起來很瘋狂,我聽起來很愚蠢,但我現在測試了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還是我的無知,但這是數據在窗口小部件上加載的唯一方式。現在這對我來說似乎是不可靠的選擇,所以我需要一些關於它的解釋。
你需要**在'onGetViewFactory'中調用'Realm.init()'嗎?因爲這意味着一些超級棘手的事情正在發生,例如多進程。 – EpicPandaForce