Java ArrayAdapter和listview中的NullpointerException

Java ArrayAdapter和listview中的NullpointerException,java,android,listview,nullpointerexception,android-arrayadapter,Java,Android,Listview,Nullpointerexception,Android Arrayadapter,我正在尝试使用listview从Parse数据库打印用户名。但我的代码显示NullPointerException,我不知道如何解决。请帮忙 爪哇: package com.parse.starter; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.support.v7.app.ActionBar; i

我正在尝试使用listview从Parse数据库打印用户名。但我的代码显示NullPointerException,我不知道如何解决。请帮忙

爪哇:

package com.parse.starter;

import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseQuery;
import com.parse.ParseUser;

import java.util.ArrayList;
import java.util.List;

public class Show_user_lists extends AppCompatActivity {

ArrayList<String> userNames;
ArrayAdapter arrayAdapter;
ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_users_list);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    ActionBar bar = getSupportActionBar();
    bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#26A69A")));
    bar.setDisplayHomeAsUpEnabled(true);

    listView = (ListView) findViewById(R.id.listView);
    ParseQuery<ParseUser> query = ParseUser.getQuery();
    query.whereNotEqualTo("username", ParseUser.getCurrentUser().getUsername());
    query.addAscendingOrder("username");
    userNames = new ArrayList<>();
    arrayAdapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_activated_1, userNames);
    query.findInBackground(new FindCallback<ParseUser>() {
        @Override
        public void done(List<ParseUser> objects, ParseException e) {
            if (e == null) {
                if (objects.size() > 0) {
                    for (ParseUser user : objects) {
                        userNames.add(user.getUsername());
                        Log.i("uname", String.valueOf(user.getUsername()));
                    }
                    try {
                        listView.setAdapter(arrayAdapter);
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            } else {
                e.printStackTrace();
            }
        }
    });
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    //int id = item.getItemId();

    return super.onOptionsItemSelected(item);
}
}
09-30 02:00:27.020 23273-23273/com.parse.starter I/进程:发送信号。PID:23273信号:9

数据库中用户名的My Logcat:

09-30 03:02:17.514 22462-22462/com.parse.starter I/uname:     qWtBPbvjcPwQ1YVxdqvfkEsBE
09-30 03:02:17.515 22462-22462/com.parse.starter I/uname: qwerty
09-30 03:02:17.515 22462-22462/com.parse.starter I/uname: satsan
替换

arrayAdapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_activated_1, userNames);


它很可能会解决您的问题。

关于这一行:“listView=(listView)findViewById(R.id.listView);”您确定您的DB找到了该id的视图吗?是的,它找到了。。。我已尝试并注销arraylist中的名称。。。它可以工作它看起来像一个线程问题..这个'FindCallback'可能在'background'线程上执行'done'。因此它看不到'arrayAdapter'值(写在UI线程上)。因此..要解决它,你可以做一个'丑陋的热修复',将变量设置为'volatile'(volatile arrayAdapter arrayAdapter;)或者使用AsyncTask来处理“后台”和“UI线程化”问题。您是否尝试过在done方法中初始化arrayAdapter
arrayAdapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_activated_1, userNames);
arrayAdapter = new ArrayAdapter(Show_user_lists.this, android.R.layout.simple_list_item_activated_1, userNames);