Android 如何使用firebase数据更新小部件

Android 如何使用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

我想用firebase数据库中的数据更新我的主屏幕小部件标签 例如,我的数据库包含2个子消息和用户,我想用来自用户amr的最后一条消息更新小部件 这是我的密码

NewAppWidget.java

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开发人员可以帮助您。