Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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 微调器未从数据库添加所有主题_Android_Android Spinner_Android Cursor_Android Database - Fatal编程技术网

Android 微调器未从数据库添加所有主题

Android 微调器未从数据库添加所有主题,android,android-spinner,android-cursor,android-database,Android,Android Spinner,Android Cursor,Android Database,我有一个存储主题的数据库。我想在微调器中显示所有主题。我能把第一个话题写进去,但不能把另外三个写进去 不过,这三个日志: topicCursor: android.database.sqlite.SQLiteCursor@429ba4a8 str: test0 labels: [test0] dataAdapter: android.widget.ArrayAdapter@429bad58 spinner: android.support.v7.widget.AppCompatSpinner{4

我有一个存储主题的数据库。我想在微调器中显示所有主题。我能把第一个话题写进去,但不能把另外三个写进去

不过,这三个日志:

topicCursor: android.database.sqlite.SQLiteCursor@429ba4a8
str: test0
labels: [test0]
dataAdapter: android.widget.ArrayAdapter@429bad58
spinner: android.support.v7.widget.AppCompatSpinner{4296ed00 VFED..C. ......I. 0,0-0,0 #7f0d0055 app:id/spinner}
topicCursor do: android.database.sqlite.SQLiteCursor@429ba4a8
str: test
labels: [test]
dataAdapter: android.widget.ArrayAdapter@429bb6f0
spinner: android.support.v7.widget.AppCompatSpinner{4296ed00 VFED..C. ......I. 0,0-0,0 #7f0d0055 app:id/spinner}
topicCursor do: android.database.sqlite.SQLiteCursor@429ba4a8
str: Testing 
labels: [Testing]
dataAdapter: android.widget.ArrayAdapter@429bbed8
spinner: android.support.v7.widget.AppCompatSpinner{4296ed00 VFED..C. ......I. 0,0-0,0 #7f0d0055 app:id/spinner}
topicCursor do: android.database.sqlite.SQLiteCursor@429ba4a8



public void loadSpinnerData() {
                // database handler
                DatabaseHelper db = DatabaseHelper.getInstance(getApplicationContext());

                Cursor topicCursor = db.getAllTopics();
                Log.v("topicCursor", topicCursor.toString());
                db.close();

                String str;

                if (topicCursor.moveToFirst()) {
                    do {
                        str = topicCursor.getString(topicCursor.getColumnIndex("topic_name"));
                        Log.v("str", str);

                        ArrayList<String> labels = new ArrayList<String>();
                        labels.add(str);
                        Log.v("labels", labels.toString());

                        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, labels);
                        Log.v("dataAdapter", dataAdapter.toString());

                        //Drop down layout style - list view with radio button
                        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                        //Attaching data adapter to spinner
                        spinner.setAdapter(dataAdapter);
                        Log.v("spinner", spinner.toString());
                        Log.v("topicCursor do", topicCursor.toString());
                    } while (topicCursor.moveToNext());

                }

            }
topicCursor:android.database.sqlite。SQLiteCursor@429ba4a8
str:test0
标签:[test0]
dataAdapter:android.widget。ArrayAdapter@429bad58
微调器:android.support.v7.widget.AppCompatSpinner{4296ed00 VFED..C..I.0,0-0,0#7f0d0055应用程序:id/spinner}
topiccursordo:android.database.sqlite。SQLiteCursor@429ba4a8
str:测试
标签:[测试]
dataAdapter:android.widget。ArrayAdapter@429bb6f0
微调器:android.support.v7.widget.AppCompatSpinner{4296ed00 VFED..C..I.0,0-0,0#7f0d0055应用程序:id/spinner}
topiccursordo:android.database.sqlite。SQLiteCursor@429ba4a8
str:测试
标签:[测试]
dataAdapter:android.widget。ArrayAdapter@429bbed8
微调器:android.support.v7.widget.AppCompatSpinner{4296ed00 VFED..C..I.0,0-0,0#7f0d0055应用程序:id/spinner}
topiccursordo:android.database.sqlite。SQLiteCursor@429ba4a8
公共void loadSpinnerData(){
//数据库处理程序
DatabaseHelper db=DatabaseHelper.getInstance(getApplicationContext());
Cursor-topicCursor=db.getAllTopics();
Log.v(“topicCursor”,topicCursor.toString());
db.close();
字符串str;
if(topicCursor.moveToFirst()){
做{
str=topicCursor.getString(topicCursor.getColumnIndex(“主题名称”));
Log.v(“str”,str);
ArrayList标签=新的ArrayList();
添加标签(str);
Log.v(“labels”,labels.toString());
ArrayAdapter dataAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器\u项,标签);
Log.v(“dataAdapter”,dataAdapter.toString());
//下拉式布局样式-带单选按钮的列表视图
dataAdapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项);
//将数据适配器连接到微调器
spinner.setAdapter(dataAdapter);
Log.v(“spinner”,spinner.toString());
Log.v(“topiccursordo”,topicCursor.toString());
}while(topicCursor.moveToNext());
}
}

我不知道我在这里遗漏了什么,比如为什么微调器中只显示最后一个列表项?有什么建议吗?

您正在遍历光标并创建一个新的ArrayList,每次基本上只有一个项目。因此,每次设置适配器时,它都会得到一个带有一个项目的适配器。您应该首先创建ArrayList,然后构建适配器:

List<String> myList = new ArrayList<>();
while(cursor.moveToNext()) {
   myList.add(cursor.getString(someIndex));
}
// Build String Array Adapter and set it to Spinner
List myList=new ArrayList();
while(cursor.moveToNext()){
添加(cursor.getString(someIndex));
}
//构建字符串数组适配器并将其设置为微调器

您正在遍历光标,并创建一个新的ArrayList,每次只包含一项。因此,每次设置适配器时,它都会得到一个带有一个项目的适配器。您应该首先创建ArrayList,然后构建适配器:

List<String> myList = new ArrayList<>();
while(cursor.moveToNext()) {
   myList.add(cursor.getString(someIndex));
}
// Build String Array Adapter and set it to Spinner
List myList=new ArrayList();
while(cursor.moveToNext()){
添加(cursor.getString(someIndex));
}
//构建字符串数组适配器并将其设置为微调器

在循环外部创建
标签
ArrayList和
数据适配器
,然后在内部用字符串填充ArrayList,最后使用微调器上的适配器

    ArrayList<String> labels = new ArrayList<String>();
    if (topicCursor.moveToFirst()) {
        do {
            str = topicCursor.getString(topicCursor.getColumnIndex("topic_name"));
            Log.v("str", str);

            labels.add(str);
            Log.v("labels", labels.toString());

        } while (topicCursor.moveToNext());

    }
    Log.v("dataAdapter", dataAdapter.toString());
    Log.v("spinner", spinner.toString());

    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, labels);
    //Drop down layout style - list view with radio button
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    //Attaching data adapter to spinner
    spinner.setAdapter(dataAdapter);
ArrayList标签=新建ArrayList();
if(topicCursor.moveToFirst()){
做{
str=topicCursor.getString(topicCursor.getColumnIndex(“主题名称”));
Log.v(“str”,str);
添加标签(str);
Log.v(“labels”,labels.toString());
}while(topicCursor.moveToNext());
}
Log.v(“dataAdapter”,dataAdapter.toString());
Log.v(“spinner”,spinner.toString());
ArrayAdapter dataAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器\u项,标签);
//下拉式布局样式-带单选按钮的列表视图
dataAdapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项);
//将数据适配器连接到微调器
spinner.setAdapter(dataAdapter);

在循环外部创建
标签
ArrayList和
数据适配器
,然后在内部用字符串填充ArrayList,最后使用微调器上的适配器

    ArrayList<String> labels = new ArrayList<String>();
    if (topicCursor.moveToFirst()) {
        do {
            str = topicCursor.getString(topicCursor.getColumnIndex("topic_name"));
            Log.v("str", str);

            labels.add(str);
            Log.v("labels", labels.toString());

        } while (topicCursor.moveToNext());

    }
    Log.v("dataAdapter", dataAdapter.toString());
    Log.v("spinner", spinner.toString());

    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, labels);
    //Drop down layout style - list view with radio button
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    //Attaching data adapter to spinner
    spinner.setAdapter(dataAdapter);
ArrayList标签=新建ArrayList();
if(topicCursor.moveToFirst()){
做{
str=topicCursor.getString(topicCursor.getColumnIndex(“主题名称”));
Log.v(“str”,str);
添加标签(str);
Log.v(“labels”,labels.toString());
}while(topicCursor.moveToNext());
}
Log.v(“dataAdapter”,dataAdapter.toString());
Log.v(“spinner”,spinner.toString());
ArrayAdapter dataAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器\u项,标签);
//下拉式布局样式-带单选按钮的列表视图
dataAdapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项);
//将数据适配器连接到微调器
spinner.setAdapter(dataAdapter);

请注意,与其将do/while嵌套在if块中,您只需调用
while(cursor.moveToNext())
如果光标为空,它甚至不会移动到第一个项目,因此它将一起跳过该块。它的工作原理与您现在拥有的相同,但在我看来更具可读性。请注意,您可以简单地调用
while(cursor.moveToNext())
,而不是将do/while嵌套在if块中。如果光标为空,它甚至不会移动到第一个项目,因此它将一起跳过该块。它的工作原理与你现在拥有的一样,但在我看来,它更具可读性。