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