我知道这听起来很疯狂,我听起来很愚蠢,但我现在测试了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 myList = new ArrayList<>();
RealmResults myResults = realm.where(Task.class).findAll();
final int myResLength = myResults.size();
Log.d("myResLength", " "+ myResLength);
for(int j = 0; 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()'吗?因为这意味着一些超级棘手的事情正在发生,例如多进程。 –