Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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
Java Android-迭代列表时的空对象引用_Java_Android_Nullreferenceexception - Fatal编程技术网

Java Android-迭代列表时的空对象引用

Java Android-迭代列表时的空对象引用,java,android,nullreferenceexception,Java,Android,Nullreferenceexception,我试图将一个在内部类中创建的列表“usrs”复制到另一个列表“team_memebers”。 复制之后,我尝试在FOR循环中迭代“team_memebers”,但得到了一个“null object reference”错误。 “用户”列表包含通过调试打印测试的返回对象 public class ListNodeActivity extends AppCompatActivity { private ParseObject parse_task=null; private List

我试图将一个在内部类中创建的列表“usrs”复制到另一个列表“team_memebers”。 复制之后,我尝试在FOR循环中迭代“team_memebers”,但得到了一个“null object reference”错误。 “用户”列表包含通过调试打印测试的返回对象

public class ListNodeActivity extends AppCompatActivity
{
    private ParseObject parse_task=null;
    private List<String> team_memebers=null;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_node);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> usrs, ParseException e) {
            if (e == null) {

                team_memebers = new ArrayList<String>(usrs.size());
                for (ParseObject prso:usrs) {
                    team_memebers.add(new String(prso.getString("Username")));
                }
            } else {//handle the error
            }
        }
    });

    for (String str:team_memebers)
    {
        empolyeeSpinnerAdapter.add(str);
    }
}

您的问题是复制列表后并没有进行迭代。
query.findInBackground()
是一个异步回调,因此不会立即执行。因为您的迭代循环位于该回调的下面,并不意味着它将在回调执行之后执行。只需将循环放在回调中,如下所示:

query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> usrs, ParseException e) {
            if (e == null) {

            team_memebers = new ArrayList<String>(usrs.size());
            for (ParseObject prso:usrs) {
                team_memebers.add(new String(prso.getString("Username")));
            }
            for (String str:team_memebers)
            {
                empolyeeSpinnerAdapter.add(str);
            }
        } else {//handle the error
        }
    }
});
query.findInBackground(新的FindCallback(){
已完成公共作废(列出USR、Parsee){
如果(e==null){
team_memebers=newarraylist(usrs.size());
用于(ParseObject prso:usrs){
team_memebers.add(新字符串(prso.getString(“用户名”));
}
用于(字符串str:team_memebers)
{
empolyeeSpinnerAdapter.add(str);
}
}否则{//处理错误
}
}
});

您是否尝试了带计数器的普通for循环而不是foreach for循环?类似于(int i=0;i的东西是另一个线程中的query.findInBackground…@chalarangelo,是的,它在.size()上失败,因为team_成员似乎为空。@Xoce,不是,但我尝试了query.find()还有同样的问题。您的声明是NPE在for(ParseObject prso:users)上?这段代码的编写方式可能应该是NPE在for(String str:teammembers)上,因为我没有看到您在等待查询。findInBackground()在进行交互之前,调用finish。您能突出显示NPE实际发生在哪一行吗?我无法判断它是基于堆栈的,因为您有两个for(iter)循环。我尝试将其放置在“query.findInBackground()”调用块中,但我收到一条消息-“变量输入在内部类中访问;需要声明为final”您从哪个变量获得此消息?
str
team\u memebers
?无论如何,我建议您不要将
null
赋值给
team\u memebers
,而是声明它为final并用空列表初始化:
私有最终列表team\u memebers=new ArrayList()
并删除这一行:
team\u memebers=new ArrayList(usrs.size());
还声明
str
为循环中的final:
for(final String str:team\u memebers)
在“EmpolyeeSpinGeneralAdapter”上,然后声明
str
为我所说的final。
query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> usrs, ParseException e) {
            if (e == null) {

            team_memebers = new ArrayList<String>(usrs.size());
            for (ParseObject prso:usrs) {
                team_memebers.add(new String(prso.getString("Username")));
            }
            for (String str:team_memebers)
            {
                empolyeeSpinnerAdapter.add(str);
            }
        } else {//handle the error
        }
    }
});