猿问

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

完成一个聊天应用程序并在这里研究了很多问题(发现 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);



        }

        }


慕的地10843
浏览 133回答 1
1回答

萧十郎

根据您的评论并查看您的数据库结构,我可以告诉您,您需要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 中的输出将是最后一条文本消息。
随时随地看视频慕课网APP

相关分类

Java
我要回答