Android setAdapter()nullpointerexception
我的应用程序总是在“messagesList.setAdaper(adapter)”处崩溃,上面写着“无法启动活动组件信息{com.ofekot.socialchat/com.ofekot.socialchat.ChatActivity}:java.lang.NullPointerException”, 我不明白是什么导致了这个问题 这是Java类:Android setAdapter()nullpointerexception,android,listview,android-arrayadapter,Android,Listview,Android Arrayadapter,我的应用程序总是在“messagesList.setAdaper(adapter)”处崩溃,上面写着“无法启动活动组件信息{com.ofekot.socialchat/com.ofekot.socialchat.ChatActivity}:java.lang.NullPointerException”, 我不明白是什么导致了这个问题 这是Java类: package com.ofekot.socialchat; import android.os.Bundle; import android.
package com.ofekot.socialchat;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AbsListView;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import java.util.ArrayList;
public class ChatActivity extends AppCompatActivity {
private ListView messagesList;
private EditText messageBox;
private ImageButton sendBtn;
private ArrayList<ChatMessage> messages;
private String usernameFrom;
private String usernameTo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if(getSupportActionBar() != null) {
Bundle extras = getIntent().getExtras();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (extras != null) {
getSupportActionBar().setTitle(extras.getString(Config.NICKNAME));
usernameFrom = extras.getString(Config.USER_NAME_FROM);
usernameTo = extras.getString(Config.USER_NAME_TO);
}
}
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
initialize();
}
private void initialize() {
final Manager manager = new Manager(this);
messagesList = (ListView)findViewById(R.id.messagesList);
sendBtn = (ImageButton)findViewById(R.id.sendBtn);
messageBox = (EditText)findViewById(R.id.messageBox);
sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = messageBox.getText().toString();
if(!message.equals("")) {
messageBox.setText("");
manager.sendMessage(usernameFrom, message, usernameTo);
}
}
});
messagesList.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
messages = manager.readFromLocalDatabase(usernameFrom, usernameTo);
MessagesAdapter adapter = new MessagesAdapter(this, messages);
messagesList.setAdapter(adapter);
}
}
arraylistmessages
一开始是空的,因此它在getCount()
方法中抛出空指针异常
将此更改为:
private ArrayList messages=new ArrayList()
或者在创建适配器之前在代码中对其进行初始化。ArrayList messages
首先为空,因此它在getCount()
方法中抛出空指针异常
将此更改为:
private ArrayList messages=new ArrayList()
或者在创建适配器之前在代码中初始化它。任何@Misagh Emmamverdi发布的内容都是正确的。但是,如果您有一个自定义适配器,那么在getCount()中检查arraylist是否为null或与下面的不同 MessageAdapter.java
public int getCount(){
if(messages == null){ //Replace "messages" with whatever array you are passing
return 0;
}
return messages.size();
}
如果您在多个活动中使用相同的适配器显示,那么这是一种更安全的方法。无论@Misagh Emmamverdi发布什么都是正确的。但是,如果您有一个自定义适配器,那么在getCount()中检查arraylist是否为null或与下面的不同 MessageAdapter.java
public int getCount(){
if(messages == null){ //Replace "messages" with whatever array you are passing
return 0;
}
return messages.size();
}
如果您在多个活动中使用相同的适配器显示,那么这是一种更安全的方法。您可以同时粘贴日志吗?请发布堆栈跟踪吗?您的活动是否已在清单上声明?我还添加了日志变量
消息的实际内容是什么
?您可以同时粘贴日志吗发布堆栈跟踪是否在清单上声明了活动?我还添加了日志变量消息的实际内容是什么?
public int getCount(){
if(messages == null){ //Replace "messages" with whatever array you are passing
return 0;
}
return messages.size();
}