我知道这听起来很疯狂而且我听起来很愚蠢,但我现在已经测试了 20 次而且我对此没有其他解释,也许我做错了什么或者我不知道。
好的,我正在创建一个小部件,它使用 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 的小部件提供程序以从 Realm 加载数据并将其放入 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 会显示编译器会跳过它之后的整个 for 循环。我不知道这是 Android 错误、Realm 错误还是我的无知,但这是数据加载到小部件上的唯一方式。现在这对我来说似乎是不可靠的选择,所以我需要一些解释。
最佳答案
按照@EpicPandaForce 的回答,我从服务中删除了 Realm.init() 并且它现在工作正常。谢谢!
关于Android studio 错误,通过添加 Log.d 修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45198603/