Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android setAdapter()nullpointerexception_Android_Listview_Android Arrayadapter - Fatal编程技术网

Android setAdapter()nullpointerexception

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.

我的应用程序总是在“messagesList.setAdaper(adapter)”处崩溃,上面写着“无法启动活动组件信息{com.ofekot.socialchat/com.ofekot.socialchat.ChatActivity}:java.lang.NullPointerException”, 我不明白是什么导致了这个问题

这是Java类:

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