2015-05-04 1 views
1

В настоящее время я строю небольшое устройство для Android. На моей главной странице у меня есть счетчик, который заполняется «device_names» из моей базы данных SQLite.как получить определенные значения из базы данных SQLite (android) и отобразить в редактируемом текстовом виде

Когда пользователь выбирает нужное устройство, у него есть возможность обновить его информацию или удалить его.

Когда они выбирают обновление, они открывают новое действие с тремя текстовыми видами, именем устройства, номером устройства и паролем устройства. Здесь возникает моя проблема.

Я очень новичок в Java, и я не могу понять, как получить соответствующие значения из счетчика на предыдущей странице, чтобы заполнить три разных текстовых изображения, чтобы пользователь мог обмануть информацию.

Вот мой основной код деятельности:

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; 
    } 
} 

Я надеюсь, что это имеет смысл кому-то, поскольку я действительно не могу заставить его работать.

Я думаю, что простой поиск в базе данных для извлечения всех значений, соответствующих имени устройства, будет работать лучше всего, а затем преобразовать атрибут номера устройства в строку и пароль устройства в другую строку, я просто не могу работать, ,

Большое спасибо Бен

ответ

0

Если я хорошо понял, ваша проблема в том, «как я могу перейти к деятельности старые данные, так что пользователь может читать их и обновить?». Вы можете отправить старые данные с помощью putExtra(). С вашим intent.putExtra(SELECTED_DEVICE, selecteddevice); вы отправляете только тип устройства, если вы поместите другую информацию, вы можете забрать их обратно с UpdateDevice, и вы можете SetText() вашего EditText со старыми данными! Так что вам не нужна база данных для возврата информации. Вы попробовали это?

Попробуйте начать деятельность с 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 

Если вам нужна база данных для отвозить информации по этой ссылке, что очень полезно Guide for SqliteHelper

Итак, вам нужно класс, который управляет устройствами с помощью метода getter и setter. В то же время вам необходимо сохранить данные в своей базе данных для «будущего maintenace». Как вы можете видеть в ссылке с методом

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; 
} 

Вы можете вернуть всю информацию для одного контакта (для вас устройства) ищущего его идентификатором. Или второй метод, который может помочь вам в

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!

+0

Привет, l Спасибо за ответ. То, что я искал, - это возможность выбора устройства в основном действии, а затем отсюда нажмите кнопку «Обновить выбранное устройство», которая приведет пользователя к устройству обновления Мероприятия. У меня этот бит работает, отсюда я просто хочу запустить запрос, который будет искать базу данных и найти строку, содержащую выбранное устройство, в столбце device_name, а затем получить два других значения: device_number и device_password, а также получить их и поместите их в строки, которые затем можно добавить к соответствующим редактируемым текстовым изображениям. надеюсь, что с помощью –

+0

вы можете увидеть, как выглядит приложение в основном действии и активности устройства обновления здесь: http://i.imgur.com/uU03XXD.png и http://i.imgur.com/n14dXLK.png –

+0

Ohhhh ok, поэтому вам нужен «простой» запрос к базе данных. Итак, вам нужен метод в вашем 'public class DeviceOperations extends SQLiteOpenHelper', который позволяет вам брать все записи, чтобы вы могли проверить правильное устройство и получить информацию ... теперь я перередактирую свой пост, чтобы я мог быть более ясным! – Mario

Смежные вопросы