Android 如何使用firebase数据更新小部件
我想用firebase数据库中的数据更新我的主屏幕小部件标签 例如,我的数据库包含2个子消息和用户,我想用来自用户amr的最后一条消息更新小部件 这是我的密码 NewAppWidget.javaAndroid 如何使用firebase数据更新小部件,android,firebase,firebase-realtime-database,android-widget,Android,Firebase,Firebase Realtime Database,Android Widget,我想用firebase数据库中的数据更新我的主屏幕小部件标签 例如,我的数据库包含2个子消息和用户,我想用来自用户amr的最后一条消息更新小部件 这是我的密码 NewAppWidget.java public class NewAppWidget extends AppWidgetProvider { private static final String ACTION_BROADCASTWIIDGET = "ACTION_BROADCASTWIIDGET"; RemoteVie
public class NewAppWidget extends AppWidgetProvider {
private static final String ACTION_BROADCASTWIIDGET = "ACTION_BROADCASTWIIDGET";
RemoteViews views;
private void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId) {
//Construct the RemoteViews object
views = new RemoteViews(context.getPackageName(), R.layout.messages_widget);
Intent mainIntent = new Intent(context, MainActivity.class);
PendingIntent mainPendingIntent = PendingIntent.getActivity(context, 0, mainIntent, 0);
new DownloadBitmap(views).execute(" TXTME chat");
views.setOnClickPendingIntent(R.id.appwidget_text, mainPendingIntent);
Intent intent = new Intent(context, NewAppWidget.class);
intent.setAction(ACTION_BROADCASTWIIDGET);
context.sendBroadcast(intent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (ACTION_BROADCASTWIIDGET.equals(intent.getAction())) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.messages_widget);
views.setTextViewText(R.id.appwidget_text, getInformation());
ComponentName appWidget = new ComponentName(context, NewAppWidget.class);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
appWidgetManager.updateAppWidget(appWidget, views);
}
}
private String getInformation() {
DatabaseReference databaseReference =
FirebaseDatabase.getInstance().getReference().child("messages");
databaseReference.orderByChild("user").equalTo("amrkamal2").addListenerForSingleValueEvent
(new ValueEventListener() {
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
try {
MessageModel m = dataSnapshot.getChildren().iterator().next().getValue(MessageModel.class);
if (m != null) {
views.setTextViewText(R.id.appwidget_text, m.getText());
}
} catch (Throwable ignored) {}
} }
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("", "load message:onCancelled");
}
});
return "";
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// There may be multiple widgets active, so update all of them
for (int appWidgetId : appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
}
@Override
public void onDisabled(Context context) {
super.onDisabled(context);
}
}
消息表示firebase数据库中的子级
我该怎么做?请原谅糟糕的英语由于这个
getInformation()
方法,您正在复述一个emparty字符串,为什么?我知道。。那么如何将listview从另一个活动或firebase传递到小部件呢?我建议您从这里看到我的anwser的最后一部分,并看看这个。@AlexMamo我在另一篇文章中检查了您的答案,但它对我不起作用。。我确实创建了一个用作回调的接口,但即使如此,当回调被激活时,它也不会更新小部件中的视图invoked@OscarReyes在这种情况下,请使用自己的问题发布一个新问题,这样我和其他Firebase开发人员可以帮助您。