![](/img/trans.png)
[英]Android Studio, how to retrieve data from Sqlite database and display it into textview?
[英]how to retrieve specific values from SQLite database (android) and display in an editable textview
我目前正在構建一個小型 android 應用程序。 在我的 MainActivity 上,我有一個微調器,其中填充了來自我的 SQLite 數據庫的“device_names”表中的數據。
當用戶選擇所需的設備時,他們可以選擇更新或刪除它的信息。
當他們選擇更新時,他們會打開一個包含三個文本視圖、設備名稱、設備編號和設備密碼的新活動。 這就是我的問題出現的地方。
我對Java很陌生,我無法弄清楚如何從上一頁的微調器中檢索相應的值來填充三個不同的TextView,以便用戶可以更新信息。
這是我的主要活動代碼:
package ben.findmyflock;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
public class DeviceManager extends Activity implements AdapterView.OnItemSelectedListener{
Spinner spinner;
private Button newActivity;
public final static String SELECTED_DEVICE = "ben.findmyflock.DEVICE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_device_manager);
spinner= (Spinner) findViewById(R.id.device_spinner);
/*ArrayAdapter adapter=ArrayAdapter.createFromResource(this,R.array.device_array,android.R.layout.simple_spinner_item);
spinner.setAdapter(adapter);*/
spinner.setOnItemSelectedListener(this);
loadSpinnerData();
}
/**
* Function to load the spinner data from SQLite database
* */
private void loadSpinnerData() {
// database handler
DeviceOperations db = new DeviceOperations(getApplicationContext());
// Spinner Drop down elements
List<String> labels = db.getAllLabels();
// Creating adapter for spinner
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);
}
public void addNewDevice(View v) {
//do something when a button is clicked
Button adddevicebutton=(Button) v;
startActivity(new Intent(getApplicationContext(), AddDevice.class));
}
public void updateSelectedDevice(View v) {
Intent intent = new Intent(this, UpdateDevice.class);
Spinner spinner = (Spinner) findViewById(R.id.device_spinner);
String selecteddevice = spinner.getSelectedItem().toString();
intent.putExtra(SELECTED_DEVICE, selecteddevice);
startActivity(intent);
}
public void deleteSelectedDevice(View v) {
//delete selected spinner value from database
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_device_manager, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
TextView myText= (TextView) view;
Toast.makeText(this,myText.getText() + " Selected", Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
}
這是我的更新設備代碼:
package ben.findmyflock;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class UpdateDevice extends Activity {
ListView listview;
SQLiteDatabase sqLiteDatabse;
DeviceOperations deviceOperations;
Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update_device);
Intent intent = getIntent();
String selecteddevice = intent.getStringExtra(DeviceManager.SELECTED_DEVICE);
EditText devname = (EditText)findViewById(R.id.update_device_name);
devname.setText(selecteddevice, TextView.BufferType.EDITABLE);
EditText devnum = (EditText)findViewById(R.id.update_device_number);
deviceOperations = new DeviceOperations(getApplicationContext());
sqLiteDatabse =deviceOperations.getReadableDatabase();
cursor = deviceOperations.getInformation(sqLiteDatabse);
if(cursor.moveToFirst())
{
do {
String name,num,pass;
name = cursor.getString(0);
num = cursor.getString(1);
pass = cursor.getString(2);
}while (cursor.moveToNext());
}
devnum.setText(selecteddevicenumber, TextView.BufferType.EDITABLE);
EditText devpass = (EditText)findViewById(R.id.update_device_password);
devpass.setText(selecteddevicepassword, TextView.BufferType.EDITABLE);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_update_device, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
這是我的設備操作文件
package ben.findmyflock;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
* Created by Ben on 03/05/2015.
*/
public class DeviceOperations extends SQLiteOpenHelper{
// Database Version
public static final int database_version = 1;
// Database Name
public static final String DATABASE_NAME = "device_database";
// Labels table name
public static final String TABLE_NAME = "device_info";
// Labels Table Columns names
public static final String DEVICE_NAME = "device_name";
public static final String DEVICE_NUMBER = "device_number";
public static final String DEVICE_PASSWORD = "device_password";
private static final String[] COLUMNS = {DEVICE_NAME,DEVICE_NUMBER,DEVICE_PASSWORD};
public DeviceOperations(Context context) {
super(context, DATABASE_NAME, null, database_version);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
// Category table create query
String CREATE_DEVICE_TABLE = "CREATE TABLE " + TABLE_NAME + "(" + DEVICE_NAME + " TEXT," + DEVICE_NUMBER + " INTEGER" + DEVICE_PASSWORD + " TEXT)";
db.execSQL(CREATE_DEVICE_TABLE);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
// Create tables again
onCreate(db);
}
//Inserting values
public void putInformation(DeviceOperations dop,String name,String number,String pass)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DEVICE_PASSWORD, pass);
values.put(DEVICE_NUMBER, number);
values.put(DEVICE_NAME, name);
db.insert(TABLE_NAME, null, values);
db.close();
}
public Cursor getInformation(SQLiteDatabase db)
{
Cursor cursor;
String[] projections = {DEVICE_NAME, DEVICE_NUMBER, DEVICE_PASSWORD};
cursor = db.query(TABLE_NAME,projections,null,null,null,null,null);
return cursor;
}
public List<String> getAllLabels(){
List<String> labels = new ArrayList<String>();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery,null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
labels.add(cursor.getString(0));
} while (cursor.moveToNext());
}
// closing connection
cursor.close();
db.close();
// returning labels
return labels;
}
}
我希望這對某人有意義。 我真的無法讓它工作。
我認為在數據庫中進行簡單的搜索以提取與設備名稱匹配的所有值最有效,然后將設備編號屬性轉換為字符串,將設備密碼轉換為另一個字符串,我只是無法解決這個問題。
非常感謝本
如果我理解得很好,您的問題是“我如何將舊數據傳遞給活動,以便用戶可以讀取它們並更新?”。 您可以使用putExtra()
發送舊數據。 隨着你的intent.putExtra(SELECTED_DEVICE, selecteddevice);
您只發送設備類型,如果您輸入其他信息,您可以從UpdateDevice
它們,並且您可以使用舊數據對EditText
進行SetText()
! 就像那樣,您不需要數據庫來收回信息。 你試過這個嗎?
嘗試使用StartActivityForResult
開始活動,並通過以下方式取回新信息:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 1) {
if (resultCode == RESULT_OK) {
String result1 = data.getStringExtra("result1");
String result2 = data.getStringExtra("result2");
String result3 = data.getStringExtra("result3");
//Update the database with new data
}
if (resultCode == RESULT_CANCELED) {
//No change
}
}
}//onActivityResult
如果您需要數據庫以獲取收回信息,請點擊此鏈接,該鏈接對 SqliteHelper非常有用
因此,您需要一個使用 getter 和 setter 方法管理設備的類。 同時,您需要將數據保存在您的數據庫中以備“未來維護”之用。 正如您在方法鏈接中看到的
getContact()
// Getting single contact
public Contact getContact(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2));
// return contact
return contact;
}
您可以通過 ID 檢索單個聯系人(對於您的設備)的所有信息。 或者可以幫助您的第二種方法是
getAllContacts()
// Getting All Contacts
public List<Contact> getAllContacts() {
List<Contact> contactList = new ArrayList<Contact>();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Contact contact = new Contact();
contact.setID(Integer.parseInt(cursor.getString(0)));
contact.setName(cursor.getString(1));
contact.setPhoneNumber(cursor.getString(2));
// Adding contact to list
contactList.add(contact);
} while (cursor.moveToNext());
}
// return contact list
return contactList;
}
這將返回表中所有項目的列表,因此您可以檢查類似的內容(將該代碼放在需要從數據庫讀取所有數據的位置):
DatabaseHandler db = new DatabaseHandler(this);
// Reading all device
List<Device> devices = db.getAllContacts();
for (Device dev : devices) {
if(dev.getNameDevice() == DeviceToUpadeName){
//do the get of all information
device_number = dev.getDeviceNumber();//This getmethod is from you Device Class
device_password = dev.getDevicePassword();
}
}
我在這里發布的所有信息都來自我發布的鏈接。 我寫了一些解釋以獲得更多幫助。 我希望這就是你所需要的! PS:記住get和set方法的Device類!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.