Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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 来自数据库onitemselectedlistener的微调器数据不工作_Android_Android Activity_Spinner_Android Sqlite - Fatal编程技术网

Android 来自数据库onitemselectedlistener的微调器数据不工作

Android 来自数据库onitemselectedlistener的微调器数据不工作,android,android-activity,spinner,android-sqlite,Android,Android Activity,Spinner,Android Sqlite,当单击来自数据库的微调器数据时,它会显示一些文本。但我无法实现。微调器数据通过使用数据库成功添加到微调器中。 这是我的java类文件。我选择的侦听器编码有一个错误。请告诉我如何解决这个问题。 主要活动: package com.samir.spinner; import java.util.ArrayList; import java.util.List; import java.util.Set; import android.app.Activity; import android.co

当单击来自数据库的微调器数据时,它会显示一些文本。但我无法实现。微调器数据通过使用数据库成功添加到微调器中。 这是我的java类文件。我选择的侦听器编码有一个错误。请告诉我如何解决这个问题。 主要活动:

package com.samir.spinner;

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

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public abstract class MainActivity extends Activity implements OnClickListener,
        OnItemSelectedListener {

    private EditText edittext;
    private Button btnAdd;
    private Spinner spinner;
    DatabaseHelper db;
    List<String> list;
    ArrayAdapter<String> adapter;
    TextView tv;
    Set<String> s;
    protected Cursor c;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        db = new DatabaseHelper(MainActivity.this);

        edittext = (EditText) findViewById(R.id.editText1);
        btnAdd = (Button) findViewById(R.id.btnadd);
        spinner = (Spinner) findViewById(R.id.spinner1);

        btnAdd.setOnClickListener(this);
        spinner.setOnItemSelectedListener(this);
    }

    @Override
    public void onClick(View v) {

        String name = edittext.getText().toString().trim();

        if (TextUtils.isEmpty(name)) {
            // showToast("Please Enter Your Name");
            edittext.setError("Please Enter Your Name");
            edittext.requestFocus();
        } else {
            db.insertData(name);
            edittext.setText("");

            // Hiding the keyboard
            InputMethodManager inputmangager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            inputmangager.hideSoftInputFromWindow(edittext.getWindowToken(), 0);

            loadSpinner();
        }

    }

    private void loadSpinner() {
        // here i used Set Because Set doesn't allow duplicates.
        Set<String> set = db.getAllData();

        List<String> list = new ArrayList<String>(set);

        adapter = new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_spinner_item, list);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spinner.setAdapter(adapter);
        spinner.setWillNotDraw(false);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View v,
                    int position, long id) {

              Object item=parent.getItemAtPosition(position);
              tv=(TextView) findViewById(R.id.txt);
              tv.setText((CharSequence) item);
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }

        });
    }
}
这是我的DatabaseHelper类。 DatabaseHelper.java:

package com.samir.spinner;

import java.util.HashSet;
import java.util.Set;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {
    private static final int DB_VERSION = 1;
    private static final String DB_NAME = "mydb";
    private static final String TABLE_NAME = "mytable";
    private static final String _id = "_id";
    private static final String name = "name";

    public DatabaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTableQuery = "create table " + TABLE_NAME + "(" + _id
                + " INTEGER PRIMARY KEY," + name + " TEXT)";
        db.execSQL(createTableQuery);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("drop table if exists " + TABLE_NAME);

        onCreate(db);
    }

    public void insertData(String label) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(name, label);
        db.insert(TABLE_NAME, null, values);
        db.close();
    }


    public Set<String> getAllData() {
        Set<String> set = new HashSet<String>();

        String selectQuery = "select * from " + TABLE_NAME;

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
            do {
                set.add(cursor.getString(1));
            } while (cursor.moveToNext());
        }

        cursor.close();
        db.close();

        return set;
    }
}
package com.samir.spinner;
导入java.util.HashSet;
导入java.util.Set;
导入android.content.ContentValues;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteOpenHelper;
公共类DatabaseHelper扩展了SQLiteOpenHelper{
私有静态最终int DB_版本=1;
私有静态最终字符串DB_NAME=“mydb”;
私有静态最终字符串表\u NAME=“mytable”;
私有静态最终字符串_id=“_id”;
私有静态最终字符串name=“name”;
公共数据库助手(上下文){
super(上下文,数据库名称,空,数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase db){
String createTableQuery=“create table”+表名+”(“+\u id
+“整型主键,”+name+“TEXT)”;
execSQL(createTableQuery);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
db.execSQL(“如果存在删除表”+表名称);
onCreate(db);
}
公共void insertData(字符串标签){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues=新的ContentValues();
值。放置(名称、标签);
db.insert(表名称,空,值);
db.close();
}
公共集getAllData(){
Set=newhashset();
String selectQuery=“select*from”+表格名称;
SQLiteDatabase db=this.getReadableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
做{
set.add(cursor.getString(1));
}while(cursor.moveToNext());
}
cursor.close();
db.close();
返回集;
}
}

您正在将微调器的选定侦听器设置为“this”上下文。这根本不起作用,这是一个无效的论点。试试这个:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Object item = parent.getItemAtPosition(position);
    }
    public void onNothingSelected(AdapterView<?> parent) {
    }
});
尝试执行item.getText().toString()。如果这不起作用,请省略getText()并只执行toString()。不过我不确定。

改变

Object item=parent.getItemAtPosition(position);

然后简单地写

tv.setText(item); rather then 


tv.setText((CharSequence) item); 

他做得对。调用onitemclick有不同的形式。我不确定,所以这可能是真的,但他说他在onitemselectedlistener的代码中有一个错误,这就是我的方法,这两种方法都有效。事实上,他没有收到正确形式的onclick项。这是y,他得到了“实例化异常”啊,好的。我不知道。现在我得到了以下模拟器输出:在模拟器中,应用程序进程正在等待,然后模拟器关闭,logcat输出在哪里…?您在微调器中获取数据。??或者当活动开始时出现错误??那么这不是所选侦听器的问题。还有其他一些问题。试着弄清楚。
Object item=parent.getItemAtPosition(position);
String item = (String) parent.getItemAtPosition(position);
tv.setText(item); rather then 


tv.setText((CharSequence) item);