Java 从列表填充微调器

Java 从列表填充微调器,java,android,Java,Android,我在用列表类型填充微调器时遇到一些困难 目标:按下主菜单上的按钮时,它执行任务GetTownsTask,该任务在新屏幕上填充微调器,但在设置适配器时它会中断 MainActivity.java private class GetTownsTask extends AsyncTask<Void, Void, List<String>> { @Override protected List<String> doInBackground(Void..

我在用
列表
类型填充
微调器
时遇到一些困难

目标:按下主菜单上的
按钮
时,它执行任务GetTownsTask,该任务在新屏幕上填充
微调器
,但在设置
适配器
时它会中断

MainActivity.java

private class GetTownsTask extends AsyncTask<Void, Void, List<String>> {
    @Override
    protected List<String> doInBackground(Void... p)  {

        // api calls
        List<String> towns = new ArrayList<String>();
        // populate towns
        return towns;
    }

    @Override
    protected void onPostExecute(List<String> townList) {

        Spinner spinner = (Spinner) findViewById(R.id.spinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                MainActivity.this, 
                android.R.layout.simple_spinner_dropdown_item, 
                townList.toArray( new String[0] ));
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);    // line 124, breaks here
    }
}
微调器屏幕

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#787878">

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/townTextView"
        android:layout_below="@+id/townTextView"
        android:layout_marginTop="10dp" />

</RelativeLayout>


问题在于
townList.toArray(新字符串[0])
。尝试使用
townList.toArray()
,这将确保创建的字符串数组与townList的大小相同

//像这样填充微调器

package com.javasamples;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class ArrayAdapterDemo2 extends Activity implements
        AdapterView.OnItemSelectedListener {
    TextView selection;
    String[] items = { "this", "is", "a", "really", 
            "really2", "really3",
            "really4", "really5", "silly", "list" };

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        selection = (TextView) findViewById(R.id.selection);

        Spinner spin = (Spinner) findViewById(R.id.spinner);
        spin.setOnItemSelectedListener(this);

        ArrayAdapter aa = new ArrayAdapter(
                this,
                android.R.layout.simple_spinner_item, 
                items);

        aa.setDropDownViewResource(
           android.R.layout.simple_spinner_dropdown_item);
        spin.setAdapter(aa);
    }

    public void onItemSelected(AdapterView<?> parent, View v, int position,
            long id) {
        selection.setText(items[position]);
    }

    public void onNothingSelected(AdapterView<?> parent) {
        selection.setText("");
    }
}//class
package com.javasamples;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.Spinner;
导入android.widget.TextView;
公共类ArrayAdapterDemo2扩展了活动实现
AdapterView.OnItemSelectedListener{
文本视图选择;
String[]items={“this”、“is”、“a”、“really”,
“really2”、“really3”,
“really4”、“really5”、“傻”、“列表”};
@凌驾
创建公共空间(捆绑冰柱){
超级冰柱;
setContentView(R.layout.main);
selection=(TextView)findViewById(R.id.selection);
微调器旋转=(微调器)findViewById(R.id.Spinner);
spin.setOnItemSelectedListener(此);
ArrayAdapter aa=新的ArrayAdapter(
这
android.R.layout.simple\u微调器\u项,
项目);
aa.setDropDownViewResource(
android.R.layout.simple\u微调器\u下拉菜单\u项);
旋转适配器(aa);
}
已选择公共位置(AdapterView父视图、视图v、内部位置、,
长id){
selection.setText(项目[位置]);
}
未选择公共无效(AdapterView父级){
selection.setText(“”);
}
}//阶级
这肯定会对你有所帮助

谢谢:)


这假设townList实际上是在
doInBackground()
中填充的,并且它的返回值被传递到
onPostExecute(townList)

可能是
微调器
null
。将其添加到
XML
文件中?
spinner
为空,如果没有任何额外的代码,很难说为什么。顶部有towns,但您正在调用townList.toArray()。您是否通过在onPostExecute方法内部进行调试来检查townList是否不为null?@M Mohsin Naeem-我确实将其添加到了我的xml中,否则代码将如何找到它@ThinkStip-townList在onPostExecute()中不为空,onPostExecute()是
MainActivity.java
townList.toArray()
中的第124行,必须使用字符串[]强制转换,这导致了此错误
java.lang.ClassCastException:java.lang.Object[]无法强制转换为java.lang.String[]
您看到问题了吗?因为他没有提供完整的代码,所以它不包含“townList”变量。我鼓励你尽快帮助别人
package com.javasamples;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class ArrayAdapterDemo2 extends Activity implements
        AdapterView.OnItemSelectedListener {
    TextView selection;
    String[] items = { "this", "is", "a", "really", 
            "really2", "really3",
            "really4", "really5", "silly", "list" };

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        selection = (TextView) findViewById(R.id.selection);

        Spinner spin = (Spinner) findViewById(R.id.spinner);
        spin.setOnItemSelectedListener(this);

        ArrayAdapter aa = new ArrayAdapter(
                this,
                android.R.layout.simple_spinner_item, 
                items);

        aa.setDropDownViewResource(
           android.R.layout.simple_spinner_dropdown_item);
        spin.setAdapter(aa);
    }

    public void onItemSelected(AdapterView<?> parent, View v, int position,
            long id) {
        selection.setText(items[position]);
    }

    public void onNothingSelected(AdapterView<?> parent) {
        selection.setText("");
    }
}//class
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                MainActivity.this, 
                android.R.layout.simple_spinner_dropdown_item, 
                townList.toArray( new String[0] ));
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                MainActivity.this, 
                android.R.layout.simple_spinner_dropdown_item, 
                townList);