所以我有一个工作 SQL 数据库,它利用 VARCHARs 的所有值。我对此没有任何问题,并将其用于多个应用程序。
我已经意识到,对于我的应用程序的许多部分,微调器会比让用户自己实际输入文本更好,因为它会更快、更漂亮等。
这是我的问题。我似乎无法保存微调器的位置,并且不知道如果我能弄清楚如何检索它。我已经最小化了我的代码,只专注于让它与一个旋转器一起工作,它的数据库只保存两个值。文本视图和微调器。
这是我的代码(应该注意,我正在尝试我能想到的一切。将变量定义为 long、int、object.... 等等,因此可能存在一些代码差异)
数据库开瓶器代码
@Override
public void onCreate(SQLiteDatabase db) {
String createQuery = "CREATE TABLE country (_id integer primary key autoincrement,name VARCHAR, save long);";
db.execSQL(createQuery);
}
DB 连接器代码
public void insertContact( String name, long choice)
{
ContentValues newCon = new ContentValues();
newCon.put("name", name);
newCon.put("save", choice);
open();
database.insert("country", null, newCon);
close();
}
public void updateContact(long id, String name, long choice)
{
ContentValues editCon = new ContentValues();
editCon.put("name",name);
editCon.put("save", choice);
open();
database.update("country", editCon, "_id=" + id, null);
close();
}
添加/编辑活动课程
setContentView(R.layout.add_country);
spin = (Spinner)findViewById(R.id.spinner1);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, numbers);
nameEt = (EditText) findViewById(R.id.nameEdit);
spin.setOnItemSelectedListener(this);
spin.setAdapter(adapter);
Bundle extras = getIntent().getExtras();
if (extras != null)
{
rowID = extras.getLong("row_id");
nameEt.setText(extras.getString("name"));
spin.setSelection(((ArrayAdapter<?>)spin.getAdapter()).getPosition(null)); }
private void saveContact()
{
DatabaseConnector dbConnector = new DatabaseConnector(this);
if (getIntent().getExtras() == null)
{
dbConnector.insertContact
(nameEt.getText().toString(),
spin.getItemIdAtPosition(choice));
}
else
{
dbConnector.updateContact(rowID,
nameEt.getText().toString(),
spin.getItemIdAtPosition(choice));
}
}
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3){
saved = spin.getSelectedItem().toString();
int choice = spin.getSelectedItemPosition();
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
}
查看课程
public class ViewCountry extends Activity implements OnClickListener{
private long rowID;
private TextView nameTv;
TextView ep;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.view_country);
Button a = (Button)findViewById(R.id.editbuttons);
Button b = (Button)findViewById(R.id.deletebuttons);
a.setOnClickListener(this);
b.setOnClickListener(this);
setUpViews();
Bundle extras = getIntent().getExtras();
rowID = extras.getLong(CountryList.ROW_ID);
}
private void setUpViews() {
nameTv = (TextView) findViewById(R.id.nameText);
ep = (TextView)findViewById(R.id.newText99);
}
@Override
protected void onResume()
{
super.onResume();
new LoadContacts().execute(rowID);
}
private class LoadContacts extends AsyncTask<Long, Object, Cursor>
{
DatabaseConnector dbConnector = new DatabaseConnector(ViewCountry.this);
@Override
protected Cursor doInBackground(Long... params)
{
dbConnector.open();
return dbConnector.getOneContact(params[0]);
}
@Override
protected void onPostExecute(Cursor result)
{
super.onPostExecute(result);
result.moveToFirst();
// get the column index for each data item
int nameIndex = result.getColumnIndex("name");
int epicIndex = result.getColumnIndex("save");
nameTv.setText(result.getString(nameIndex));
ep.setText(result.getString(epicIndex));
result.close();
dbConnector.close();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.view_country_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.editItem:
Intent addEditContact =
new Intent(this, AddEditCountry.class);
addEditContact.putExtra(CountryList.ROW_ID, rowID);
addEditContact.putExtra("name", nameTv.getText());
addEditContact.putExtra("save", ep.getText());
startActivity(addEditContact);
return true;
case R.id.deleteItem:
deleteContact();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void deleteContact()
{
AlertDialog.Builder alert = new AlertDialog.Builder(ViewCountry.this);
alert.setTitle(R.string.confirmTitle);
alert.setMessage(R.string.confirmMessage);
alert.setPositiveButton(R.string.delete_btn,
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int button)
{
final DatabaseConnector dbConnector =
new DatabaseConnector(ViewCountry.this);
AsyncTask<Long, Object, Object> deleteTask =
new AsyncTask<Long, Object, Object>()
{
@Override
protected Object doInBackground(Long... params)
{
dbConnector.deleteContact(params[0]);
return null;
}
@Override
protected void onPostExecute(Object result)
{
finish();
}
};
deleteTask.execute(new Long[] { rowID });
}
}
);
alert.setNegativeButton(R.string.cancel_btn, null).show();
}
抱歉,如果我缺少要给您的数据。我从前三段代码中删减了一堆,以尽量减少阅读时间。让我知道您是否需要其他东西。我已经尝试了我能想到的一切。
这是在调整代码之后
数据库开瓶器
public void onCreate(SQLiteDatabase db) {
String createQuery = "CREATE TABLE country (_id integer primary key autoincrement,name VARCHAR, save int);";
db.execSQL(createQuery);
DB 连接器类
public void insertContact( String name, int choice)
{
ContentValues newCon = new ContentValues();
newCon.put("name", name);
newCon.put("save", choice);
open();
database.insert("country", null, newCon);
close();
}
public void updateContact(long id, String name, int choice)
{
ContentValues editCon = new ContentValues();
editCon.put("name",name);
editCon.put("save", choice);
open();
database.update("country", editCon, "_id=" + id, null);
close();
}
添加/编辑类
我无法确定在哪里插入新的捆绑包和代码。
这就是我所做的
Bundle extras = getIntent().getExtras();
Bundle contact = dbConnector.updateContact(saved);
在这里我收到错误“dbConnector 类型中的方法 updateContact (Long, String, int) 不适用于参数 (String)” if (extras != null) { rowID = extras.getLong("row_id"); nameEt.setText(extras.getString("name")); spin.setSelection(((ArrayAdapter)spin.getAdapter()).getPosition(null));} String name = contact.getString("name"); int position = contact.getInt("位置"); 自旋.setSelection(位置);
现在在这里,稍后在同一个活动中我得到一个类似的错误
private void saveContact()
{
if (getIntent().getExtras() == null)
{
dbConnector.insertContact
(nameEt.getText().toString(),
spin.getItemIdAtPosition(choice));
这里它说“dbconnector 类型中的方法 insertContact (String, int) 不适用于参数 (String, long)”
我不知道它在哪里得到了很长的时间,因为我已经在我想的任何地方都删除了它。} else { dbConnector.updateContact(rowID, nameEt.getText().toString(), spin.getItemIdAtPosition(choice));
此处出现“dbconnector 类型中的方法 insertContact (long, String, int) 不适用于参数 (long String, long)”
}
}
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3){
saved = spin.getSelectedItem().toString();
这些是目前我唯一的错误。我觉得我处于边缘,但无法弄清楚最后一个问题到底在哪里。