Android 为什么我的ArrayAdapter显示为空?

Android 为什么我的ArrayAdapter显示为空?,android,spinner,android-arrayadapter,Android,Spinner,Android Arrayadapter,我试图用从web中提取的数据填充微调器,这些数据存储在ArrayList中。问题是,我试图将数据放入ArrayAdapter,然后使用它填充微调器。但是我的应用程序不断崩溃,logcat告诉我company.setAdapter(adapter)存在空指针异常;我不明白为什么适配器是空的 cList = new ArrayList<Company>(); getCompanies(); for(int i = 0; i < cList.size(); i++){

我试图用从web中提取的数据填充微调器,这些数据存储在ArrayList中。问题是,我试图将数据放入ArrayAdapter,然后使用它填充微调器。但是我的应用程序不断崩溃,logcat告诉我company.setAdapter(adapter)存在空指针异常;我不明白为什么适配器是空的

cList = new ArrayList<Company>();
    getCompanies();
    for(int i = 0; i < cList.size(); i++){
        nameList.add(cList.get(i).getNameAndCountry());
    }

    orChoice = (RadioGroup) findViewById(R.id.radioGroup1);
    company = (Spinner) findViewById(R.id.spinner1);
    // Create an ArrayAdapter using the string array and a default spinner layout
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.activity_add_new, nameList);
    //ArrayAdapter.createFromResource(this,R.array.product_types, android.R.layout.simple_spinner_item);
    // Specify the layout to use when the list of choices appears
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // Apply the adapter to the spinner
    company.setAdapter(adapter);

将Arraylist替换为下一行

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, nameList);
ArrayAdapter adapter=新的ArrayAdapter(这是android.R.layout.simple\u下拉列表\u item\u 1line,名称列表);

我多次遇到这个问题,这是由于Json数据(在我的例子中)对于某些值为空。尝试如下设置arraylist代码:

 nameList.add(cList.get(i).getNameAndCountry()+"");

我只在代码中添加了“”,所以如果getNameAndCountry()返回任何空值,它将转换为空字符串。如果您正在检查,那么它非常有用

请确保以下代码在适配器设置之前

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

你的代码

既然你的
喷丝头1
看起来没问题,我就没主意了。删除我的答案,以便此问题获得更多视图。从代码和日志中,
nameList
为空。(参见
ArrayAdapter.getCount
的源代码,非常简单)随后,
cList
为空,否则崩溃会更早。您声称从网络获取数据,但对
getcompanys
的调用在ui线程上。你到底是如何获取这些数据的?我明白你的意思了--我插入了一些print语句,看起来数据不是持久的--它会被检索,但是在下载数据的异步任务之外引用cList不会访问它。我声明cList为全局变量以避免这种情况,但很明显,它不起作用。
 nameList.add(cList.get(i).getNameAndCountry()+"");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);