У меня есть виджет ведьмы. Я получаю некоторые данные из магазина и отображаю их в виджете стека. Данные получаются правильно, но не отображаются в стеке. Когда я добавляю некоторые данные программно для тестирования, они отображаются правильно. Но когда я получаю данные из firestore - даже если данные получаются, потому что я добавил тостовое сообщение, чтобы увидеть , и правильно получено, данные не показаны. Как решить эту проблему?
Это мой код:
public class TaksWidgetService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new TaskWidgetItemFactory(getApplicationContext(),intent);
}
class TaskWidgetItemFactory implements RemoteViewsFactory {
private Context context;
private int appWidgetId;
private List<Task> taskList = new ArrayList<>();
private FirebaseFirestore firestore = FirebaseFirestore.getInstance();
private CollectionReference collectionReference = firestore.collection("Users")
.document(FirebaseAuth.getInstance().getCurrentUser().getUid())
.collection("Tasks");
public TaskWidgetItemFactory (Context context,Intent intent){
this.context = context;
this.appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
@Override
public void onCreate() {
collectionReference.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if (e != null){
//error
} else {
for (QueryDocumentSnapshot queryDocumentSnapshot : queryDocumentSnapshots){
Task task = queryDocumentSnapshot.toObject(Task.class);
Toast.makeText(context, task.getName(), Toast.LENGTH_SHORT).show();
taskList.add(task);
}
}
}
});
}
@Override
public void onDataSetChanged() {
/* add limit */
}
@Override
public void onDestroy() {
/* close the firebase */
}
@Override
public int getCount() {
return taskList.size();
}
@Override
public RemoteViews getViewAt(int position) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_item);
remoteViews.setTextViewText(R.id.widget_text_view_task_name,taskList.get(position).getName());
return remoteViews;
}
@Override
public RemoteViews getLoadingView() {
return null;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public boolean hasStableIds() {
return true;
}
} }