引起:java.lang.RuntimeException:布局不能为空。致电setLayout
只要按按钮通过Firebase发送消息,应用程序就会崩溃。我不知道如何解决这个错误。我尝试了很多,但不会停止崩溃。引起:java.lang.RuntimeException:布局不能为空。致电setLayout
我有2个布局文件,那些是list_item2.xml和listitem_chatbox.xml。
我有项目提交今晚,所以任何帮助真正很快将不胜感激,Thnkyou
public class MainActivityChat extends AppCompatActivity{
private static int SIGN_IN_REQUEST_CODE=1;
Query query = FirebaseDatabase.getInstance()
.getReference()
.child("chats")
.limitToLast(50);
FirebaseRecyclerOptions<ChatMessage> options =
new FirebaseRecyclerOptions.Builder<ChatMessage>()
.setQuery(query, ChatMessage.class)
.build();
private FirebaseListAdapter<ChatMessage> adapter;
RelativeLayout listitem_chatbox;
FloatingActionButton fab;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.nav_logout)
{
AuthUI.getInstance().signOut(this).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Snackbar.make(listitem_chatbox, "YOU HAVE BEEN LOGGED 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)
{
Snackbar.make(listitem_chatbox, "SUCCESSFULLY SIGNED IN, WELCOME!", Snackbar.LENGTH_SHORT).show();
displayChatMessage();
}
else
{
Snackbar.make(listitem_chatbox, "SIGN IN FAILED, TRY LATER!!", Snackbar.LENGTH_SHORT).show();
finish();
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listitem_chatbox);
listitem_chatbox = (RelativeLayout)findViewById(R.id.listitem_chatbox);
fab= (FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText input= (EditText)findViewById(R.id.input);
FirebaseDatabase.getInstance().getReference().push().setValue(new ChatMessage(input.getText().toString(),
FirebaseAuth.getInstance().getCurrentUser().getEmail()));
input.setText(" ");
}
});
if(FirebaseAuth.getInstance().getCurrentUser()==null)
{
startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().build(), SIGN_IN_REQUEST_CODE);
}
else
{
Snackbar.make(listitem_chatbox, "WELCOME" + FirebaseAuth.getInstance().getCurrentUser().getEmail(), Snackbar.LENGTH_SHORT).show();
//display content
displayChatMessage();
}
}
private void displayChatMessage() {
RecyclerView RV = (RecyclerView) findViewById(R.id.rv_numbers);
LinearLayoutManager LLM = new LinearLayoutManager(this);
RV.setLayoutManager(LLM);
RV.setHasFixedSize(true);
class ChatHolder extends RecyclerView.ViewHolder
{
TextView messageText, messageUser, messageTime;
public ChatHolder(View itemView) {
super(itemView);
messageText = (TextView) findViewById(R.id.message_text);
messageUser = (TextView) findViewById(R.id.message_user);
messageTime = (TextView) findViewById(R.id.message_time);
}
}
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<ChatMessage, ChatHolder>(options) {
@Override
public ChatHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Create a new instance of the ViewHolder, in this case we are using a custom
// layout called R.layout.message for each item
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item2, parent, false);
return new ChatHolder(view);
}
@Override
protected void onBindViewHolder(ChatHolder holder, int position, ChatMessage model) {
// Bind the Chat object to the ChatHolder
// ...
holder.messageText.setText(model.getMessageText());
holder.messageUser.setText(model.getMessageUser());
holder.messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)", model.getMessageTime()));
}
@Override
public int getItemCount() {
return super.getItemCount();
}
};
RV.setAdapter(adapter);
}
}
你似乎使用FirebaseUI 3.x中,而您的代码使用的语法适用于FirebaseUI 2.x及更低版本。在3.x中,适配器的构造函数被改为采用FirebaseRecyclerOptions
参数而不是单独的参数。从readme on github:
首先,通过建立
FirebaseRecyclerOptions
配置适配器。在这种情况下,我们将继续与我们聊天例如:FirebaseRecyclerOptions<Chat> options = new FirebaseRecyclerOptions.Builder<Chat>() .setQuery(query, Chat.class) .build();
下一页创建
FirebaseRecyclerAdapter
对象。您应该已经有一个ViewHolder
子类来显示每个项目。在这种情况下,我们会使用自定义ChatHolder
类:adapter = new FirebaseRecyclerAdapter<Chat, ChatHolder>(options) {
Thankyou,以及帮助和我的错误被删除。但是,只要我按下发送消息按钮,我的应用就会崩溃。 引起:java.lang.RuntimeException:布局不能为空。致电setLayout –
很高兴听到最初的问题消失了。这似乎是一个不同的问题,并且[这应该有所帮助](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it)。如果您无法解决问题,我建议隔离该问题并单独询问相关问题。如果你花时间[创建一个MCVE](http://stackoverflow.com/help/mcve),你更有可能获得帮助,并且不太可能得到低估。 –
如何纠正呢? @Selvin,我很感激它,谢谢 –
将正确的参数传递给构造函数...哪些是正确的?它全部在文档 – Selvin
我传递了我认为正确的参数,但实际上并不是这样,所以我想我需要对代码的一点帮助。我试过重新安排参数,但它没有奏效。 –