【问题标题】:Android Studio - Chat not displayingAndroid Studio - 聊天不显示
【发布时间】:2018-06-11 11:11:18
【问题描述】:

Main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:id="@+id/activity_main"
tools:context="com.example.syafiq.mychatapp.MainActivity">



<android.support.design.widget.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:src="@drawable/ic_send"
    android:id="@+id/fab"
    android:tint="@android:color/white"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    app:fabSize="mini"
    />

<android.support.design.widget.TextInputLayout

    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@+id/fab"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    >
    <EditText
        android:id="@+id/messageinput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/fab"
        android:layout_centerHorizontal="true"
        android:hint="Message..." />
</android.support.design.widget.TextInputLayout>


<ListView
    android:id="@+id/list_of_message"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:layout_above="@+id/fab"
    android:dividerHeight="16dp"
    android:divider="@android:color/transparent"
    android:layout_marginBottom="16dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</ListView>

主代码

private static int SIGN_IN_REQUEST_CODE =1;
//private List<ChatMessage> list = new ArrayList<ChatMessage>();
FirebaseListAdapter<ChatMessage> adapter;
RelativeLayout activity_main;
FloatingActionButton fab;

FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference myRef = db.getReference("message");


@Override
public boolean onOptionsItemSelected(MenuItem item)
{

    if (item.getItemId() == R.id.menu_signout)
    {
        AuthUI
            .getInstance()
            .signOut(this)
            .addOnCompleteListener(
                new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task)
                    {
                        Snackbar
                            .make(
                                activity_main,
                                "You have been signed out.", 
                                Snackbar.LENGTH_SHORT
                            ).show()
                        ;
                        finish();
                    }
                }
            )
        ;
    }
    return true;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode==SIGN_IN_REQUEST_CODE)
    {
        if (resultCode==RESULT_OK)
        {
            Snackbar
                .make(
                    activity_main,
                    "Successfully signed in!",
                    Snackbar.LENGTH_SHORT
                ).show()
            ;
            displayChatMessage();
        }
        else
        {
            Snackbar
                .make(
                    activity_main,
                    "We couldn't sign you in. Please try again lter!", 
                    Snackbar.LENGTH_SHORT
                ).show()
            ;
            finish();
        }
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.main_menu,menu);
    return true;
}

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    activity_main = (RelativeLayout) findViewById(R.id.activity_main);
    fab = (FloatingActionButton) findViewById(R.id.fab);
    fab
        .setOnClickListener(
            new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    EditText input = (EditText) findViewById(R.id.messageinput);
                    FirebaseDatabase
                        .getInstance()
                        .getReference()
                        .push()
                        .setValue(
                            new ChatMessage(
                                input.getText().toString(),
                                FirebaseAuth.getInstance().getCurrentUser().getEmail()
                            )
                        )
                    ;

                    input.setText("");

                    displayChatMessage();
                }
            }
        )
    ;

    if (FirebaseAuth.getInstance().getCurrentUser()== null)
    {
        startActivityForResult(
            AuthUI
                .getInstance()
                .createSignInIntentBuilder()
                .build(),
            SIGN_IN_REQUEST_CODE
        );
    }
    else
    {
        Snackbar
            .make(
                activity_main,
                "Welcome " + FirebaseAuth
                    .getInstance()
                    .getCurrentUser()
                    .getEmail(),
                Snackbar.LENGTH_SHORT
            ).show()
        ;
        //displayChatMessage();
    }
}    

DisplaychatMessage() 函数显示我的聊天消息

private void displayChatMessage() {
    Query query = FirebaseDatabase.getInstance().getReference().child("Chats");
    ListView listofmsgs = (ListView) findViewById(R.id.list_of_message);

    FirebaseListOptions<ChatMessage> options = new FirebaseListOptions
        .Builder<ChatMessage>()
        .setQuery(query, ChatMessage.class)
        .setLayout(R.layout.list_item)
        .build()
    ;
    //adapter.startListening();
    Log.d("ErrorCheck", "1");
    adapter = new FirebaseListAdapter<ChatMessage>(options) {
        @Override protected void populateView(View v, ChatMessage model, int position) {
            //ChatMessage cm = (ChatMessage) model;
            TextView messageText, messageUser, messageTime;
            messageText = (TextView) v.findViewById(R.id.messageinput);
            messageUser = (TextView) v.findViewById(R.id.message_user);
            messageTime = (TextView) v.findViewById(R.id.message_time);

            messageText.setText(model.getMessageText().toString());
            messageUser.setText(model.getMessageUser());
            messageTime
                .setText(
                    android.text.format.DateFormat.format(
                        "dd-mm-yyyy (HH:mm:ss)", 
                        model.getMessageTime()
                    )
                )
            ;                                
            Log.d("ErrorCheck", "2");
        }
    };
    listofmsgs.setAdapter(adapter);
    adapter.startListening();
}

大家好,我这样做了,但我的 APP 上似乎没有任何内容。但是然后,当我按发送时,在我的数据库中,我的聊天出现在那里,但它又没有出现在我的聊天应用程序上。我做了一个调试日志。错误检查 1 和 2 以查看代码在哪里结束。当我检查时,看起来调试日志只显示到 ErrorCheck 1 并且不显示显示 2。我该如何解决这个问题?

【问题讨论】:

  • 关于您的问题的信息很少。
  • @rab 很糟糕,我刚刚注册,这是我第一次发帖

标签: java android chat


【解决方案1】:

您已将 ErrorCheck 2 放入名为 anonymous class 的内容中。这就是为什么调用displayChatMessage() 只会记录ErrorCheck 1。您定义的匿名FirebaseListAdapter 类中的代码只会在调用populateView() 方法时运行。你不调用那个方法。您调用 adapter.startListening(); 某处需要调用 adapter.populateView() 才能看到 ErrorCheck 2 记录。

您可能不想在这里调用它。您可以在这里调用它只是为了进行测试,但您应该追踪应该调用它的内容。

根据docs about FirebaseListAdapter

此类是支持具有 Firebase 位置的 Android ListView 的通用方式。它处理给定 Firebase 位置的所有子事件。它将接收到的数据编组到给定的类类型中。扩展此类并提供 populateView 的实现,它将获得列表项 mLayout 的实例和保存数据的类的实例。只需按您喜欢的方式填充视图,此类将在数据更改时处理更新列表。

因此尝试更改数据并查看是否会导致您记录 ErrorCheck 2

【讨论】:

  • 对不起,没有错误检查 3。只有到 2。但它没有达到 2。只有 1
  • 别在这里告诉我。去编辑您的问题以删除任何提及错误检查 3。此外,您的新列表仍然没有显示任何调用 populateView()
  • 我该如何解决这个问题?
  • 我的意思是如何调用我的列表?
猜你喜欢
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 2012-09-01
相关资源
最近更新 更多