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);


        }
        }


    private void handleMsg(Intent intent, final Context ctx){

        msgReceiverId = intent.getStringExtra("receiverId");


        if(msgReceiverId!=null) {
            final RemoteViews views;
            views = new RemoteViews(ctx.getPackageName(), R.layout.pro_talk_widget);

            String my_Id = mAuth.getCurrentUser().getUid();


            DatabaseReference msgRef = rootRef.child("Messages").child(my_Id).child(msgReceiverId);
            Query msgQuery = msgRef.limitToLast(1);

            msgQuery.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    if(views != null) {

                        Messages messages = dataSnapshot.getValue(Messages.class);
                        String msg = messages.getMessage();

                        Log.i("Views", "views");

                        views.setTextViewText(R.id.appwidget_message, msg);

                    }else{
                        Log.i("Views", "not working");
                    }
                    }


                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

        }

    }


    @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) {
        // Enter relevant functionality for when the first widget is created
    }

    @Override
    public void onDisabled(Context context) {
        // Enter relevant functionality for when the last widget is disabled
    }
}

すべてのヘルプやリソースやアドバイスのビットは大歓迎と歓迎。

感謝

メッセージは表示されませんされているとAppwidget

プラス私はすべてのメッセージを表現推測ビューのログJUSエラーが届かないログに(私は初心者だわからない!)ロード。

再度、感謝します!

メッセージ

public class Messages {

    private String message;
    private String from;
    private String type;
    private long time;
    private boolean seen;

    public Messages(){}

    public Messages(String message,String from, String type, long time, boolean seen) {
        this.message = message;
        this.from = from;
        this.type = type;
        this.time = time;
        this.seen = seen;
    }



    public String getMessage() {
        return message;

    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public long getTime() {
        return time;
    }

    public void setTime(long time) {
        this.time = time;
    }

    public boolean isSeen() {
        return seen;
    }

    public void setSeen(boolean seen) {
        this.seen = seen;
    }
}

ログlogcat

メッセージのデバッガdatasnapshot値datasnapshot

Firebaseデシベル構造DBの構造

アレックス・マモ:

あなたのコメントによると、データベースの構造を見て、私はあなたがをループする必要があることを伝えることができます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での出力は、最後のテキストメッセージになります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=219266&siteId=1