为了账号安全,请及时绑定邮箱和手机立即绑定

dataSnapshot 检索最后一条消息,但难以在小部件上显示它......?

dataSnapshot 检索最后一条消息,但难以在小部件上显示它......?

慕的地10843 2021-06-15 17:01:55
完成一个聊天应用程序并在这里研究了很多问题(发现 1 个让我进入轨道setTextViewText 不更新小部件)正如您从我的代码中看到的那样,我已经关注了这个问题,但是,小部件没有更新消息。我已经调试并可以确认已检索到最后一条消息。我的代码:public class ProTalkWidget extends AppWidgetProvider {    private static final String ACTION_BROADCASTWIIDGET = "ACTION_BROADCASTWIIDGET";    public static final String PROTALK_APPWIDGET_UPDATE = "PROTALK_APPWIDGET_UPDATE";    private final int REQUEST_CODE = 0;    public static final String USER_ID = "userId";    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();    FirebaseAuth mAuth = FirebaseAuth.getInstance();    String msgReceiverId;    private void updateAppWidget(Context context, AppWidgetManager appWidgetManager,                                 final int appWidgetId) {        //Construct the RemoteViews object        final RemoteViews views;        views = new RemoteViews(context.getPackageName(), R.layout.pro_talk_widget);        Intent mainIntent = new Intent(context, ChatRoomActivity.class);        PendingIntent mainPendingIntent = PendingIntent.getActivity(context, REQUEST_CODE, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT);        views.setOnClickPendingIntent(R.id.widget_layout, mainPendingIntent);        Intent intent = new Intent(context, ProTalkWidget.class);        intent.setAction(ACTION_BROADCASTWIIDGET);        context.sendBroadcast(intent);        appWidgetManager = AppWidgetManager.getInstance(context);        appWidgetManager.updateAppWidget(appWidgetId, views);    }    @Override    public void onReceive(Context context, Intent intent) {        super.onReceive(context, intent);        if(PROTALK_APPWIDGET_UPDATE.equals(intent.getAction())){            Log.i("onReceive", "getting onReceived!");            handleMsg(intent, context);        }        }
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

根据您的评论并查看您的数据库结构,我可以告诉您,您需要msgReceiverId使用以下getChildren()方法遍历节点以获取其子节点:


DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

Query query = rootRef.child("Messages").child(my_Id).child(msgReceiverId).limitToLast(1);

ValueEventListener valueEventListener = new ValueEventListener() {

    @Override

    public void onDataChange(DataSnapshot dataSnapshot) {

        for(DataSnapshot ds : dataSnapshot.getChildren()) {

            Messages messages = dataSnapshot.getValue(Messages.class);

            String message = messages.getMessage();

            Log.d("TAG", message.getMessage());

        }

    }


    @Override

    public void onCancelled(DatabaseError databaseError) {}

};

query.addListenerForSingleValueEvent(valueEventListener);

logcat 中的输出将是最后一条文本消息。


查看完整回答
反对 回复 2021-06-17
  • 1 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信