#java #android #sqlite
#java #Android #sqlite
Вопрос:
Привет, это мой первый пост, но я абсолютно застрял. Либо я не понимаю базу данных (которую я действительно как бы объединяю, чтобы попытаться изучить) Я создал базовый CRUD DBHandlerclass с методом добавления плоскости. и действие, которое позволяет пользователю вводить информацию для сохранения в базе данных. Я действительно ценю любые указатели, подсказки или, если вы можете показать мне хороший учебник. учебное пособие, которое я использовал для создания этой базы данных, я нашел на http://mobilesiri.com/android-sqlite-database-tutorial-using-android-studio /
вот класс DBHandler .
public class DBHandler extends SQLiteOpenHelper {
//Database Version
private static final int DATABASE_VERSION = 1;
//Database Name
private static final String DATABASE_NAME = "avtoolsInfo";
//Plane info table name
private static final String TABLE_PLANES = "planeInfo";
// planes table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_TYPE = "type";
private static final String KEY_PLANE_CLASS = "plane_class";
private static final String KEY_FUEL_STYLE = "fuel_style";
private static final String KEY_NOTES = "notes";
public DBHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_PLANE_TABLE = "CREATE TABLE " TABLE_PLANES "(" KEY_ID " INTEGER PRIMARY KEY," KEY_NAME " TEXT," KEY_TYPE " TEXT," KEY_PLANE_CLASS " TEXT," KEY_FUEL_STYLE " TEXT," KEY_NOTES " TEXT" ")";
db.execSQL(CREATE_PLANE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
//Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " TABLE_PLANES);
//Creating tables again
onCreate(db);
}
// Adding a new plane
public void addPlane(PlaneInfo planeInfo)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, planeInfo.getName()); //plane name
values.put(KEY_TYPE, planeInfo.getType()); //plane type
values.put(KEY_PLANE_CLASS, planeInfo.getPlaneClass()); //plane class
values.put(KEY_FUEL_STYLE, planeInfo.getFuelStyle());//plane fuel style
values.put(KEY_NOTES, planeInfo.getNotes());//plane notes
// Inserting Row
db.insert(TABLE_PLANES, null, values);
// Closeing Database
db.close();
Вот действие для добавления. [править. это файл макета]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize"
android:orientation="vertical"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingTop="60dp">
<android.support.design.widget.TextInputLayout
android:id="@ id/input_layout_plane_name"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@ id/input_plane_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/plane_name"
android:maxLines="1" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@ id/input_plane_type"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/input_layout_plane_name">
<EditText
android:id="@ id/plane_type"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/plane_type" />
</android.support.design.widget.TextInputLayout>
<TextView
android:id="@ id/plane_class_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/input_plane_type"
android:layout_alignParentLeft="true"
android:text="@string/plane_class_textview"/>
<Spinner
android:id="@ id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/plane_class_text"
android:layout_below="@id/input_plane_type"
></Spinner>
<TextView
android:id="@ id/fuel_style"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/spinner"
android:text="@string/fueling_type_textview"/>
<Spinner
android:id="@ id/spinner2"
android:layout_below="@id/spinner"
android:layout_toRightOf="@id/fuel_style"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Spinner>
<Button
android:id="@ id/save_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="@string/save_button"
android:onClick="addPlane"/>
<android.support.design.widget.TextInputLayout
android:id="@ id/input_plane_notes"
android:layout_alignParentBottom="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/spinner2"
android:layout_above="@id/save_button">
<EditText
android:id="@ id/plane_notes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/plane_user_notes" />
</android.support.design.widget.TextInputLayout>
</RelativeLayout>
Я действительно ценю всю помощь.
[редактировать здесь класс add]
package com.example.jerem.avtools;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.graphics.drawable.DrawerArrowDrawable;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
public class AddNewPlane extends AppCompatActivity {
Spinner spinner2;
Spinner spinner;
ArrayAdapter<CharSequence> adapter;
ArrayAdapter<CharSequence> adapter2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_new_plane);
spinner = (Spinner) findViewById(R.id.spinner);
adapter = ArrayAdapter.createFromResource(this,R.array.plane_class_spinner_data,android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getBaseContext(),parent.getItemAtPosition(position) " is selected",Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
spinner2 = (Spinner) findViewById(R.id.spinner2);
adapter2 = ArrayAdapter.createFromResource(this,R.array.fueling_styles,android.R.layout.simple_spinner_item);
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(adapter2);
}
}
Комментарии:
1. Пока код выглядит нормально. Где находится действие, в котором вы пытаетесь добавить информацию в базу данных?
2. Еще один учебник для вас с более простыми для чтения разделами кода. guides.codepath.com/android /…
3. о, извините, я думаю, я только добавил макет … я отредактирую и добавлю код класса. Я просто не знаю, куда идти дальше.
4. возможно, вам потребуется добавить: db = getWritableDatabase(); перед вызовом ExecSQL()
5. создайте экземпляр класса DbHandler. Вы передадите свой ApplicationContext из своего класса acitivty для конструктора DbHandler. Вызовите метод add.
Ответ №1:
Я чувствую, что эта ссылка показывает, как использовать этот класс… В любом случае, здесь
public class AddNewPlane extends AppCompatActivity {
Spinner spinner2;
Spinner spinner;
ArrayAdapter<CharSequence> adapter;
ArrayAdapter<CharSequence> adapter2;
DBHandler dbHandler; // add field
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_new_plane);
dbHandler = new DbHandler(this); // initialize
}
public void addPlane(View view) {
PlaneInfo plane = new PlaneInfo();
EditText edtPlaneType = (EditText) findViewById(R.id.plane_type);
plane.setType(edtPlaneType.getText().toString());
// TODO: Set more properties
dbHandler.addPlane(plane);
}
}
Что касается id
значения, вы должны return
указать результат вставки обработчика базы данных. Это вернет номер строки вставленной записи. Затем вы можете установить значение ID для PlaneInfo
объекта из этого.
Комментарии:
1. Спасибо, крикет, это дает мне что-то, от чего можно отказаться
2. Я пропустил
addPlane
метод XML, который вам нужно будет добавить в действие3. Итак, мне нужно сделать что-то вроде такого
4. public void addPlane(просмотр представления){ PlaneInfo plane = new PlaneInfo(); PlaneInfo planeInfo = new PlaneInfo(); planeInfo.setId(Integer.parseInt(cursor.getString(0))); planeInfo.setName(cursor.getString(1)); planeInfo.setType(cursor.getString(2)); planeInfo.setPlaneClass(cursor.getString(3)); planeInfo.setFuelStyle(cursor.getString(4)); planeInfo.setNotes(cursor.getString(5));
5. Ну, вам вообще не нужно
plane = new PlaneInfo()
, поскольку вам нужен только одинPlaneInfo
объект, но я так не думаю, поскольку вы добавляете в базу данных, поэтому использование acursor
для получения информации, которая еще не существует, не имеет смысла
Ответ №2:
прядильщики бросили меня за цикл. потребовалось немного времени, чтобы разобраться в них, но это то, что я получил, спасибо за вашу помощь, ребята.
public void addPlane(View view){
PlaneInfo plane = new PlaneInfo();
EditText editPlaneName = (EditText) findViewById(R.id.input_plane_name);
plane.setType(editPlaneName.getText().toString());
EditText editPlaneType = (EditText) findViewById(R.id.plane_type);
plane.setType(editPlaneType.getText().toString());
Spinner spinnerPlaneClass = (Spinner) findViewById(R.id.spinner);
plane.setType(spinnerPlaneClass.getSelectedItem().toString());
Spinner spinner1PlaneStyle = (Spinner) findViewById(R.id.spinner2);
plane.setType(spinner1PlaneStyle.getSelectedItem().toString());
EditText editPlaneNotes = (EditText) findViewById(R.id.plane_notes);
plane.setType(editPlaneNotes.getText().toString());
dbHandler.addPlane(plane);
}