Как вызвать метод Add в классе обработчика базы данных

#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 объект, но я так не думаю, поскольку вы добавляете в базу данных, поэтому использование a cursor для получения информации, которая еще не существует, не имеет смысла

Ответ №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);
}