miss noOona Ответов: 1

Сбой Android при подключении к sqlite?


Я новичок в android и не очень хорошо осведомлен об этом. Мне нужно подключить android studio к SQLite , в android studio я сделал приложение ,которое берет текстовое поле и вставляет данные SQLite, я написал следующий код в основном действии

 package com.example.helloworld;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;




import java.text.BreakIterator;

public class MainActivity extends AppCompatActivity {

    BreakIterator lst = null;        BreakIterator studentid = null;        BreakIterator studentname = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void loadStudents(View view) {
        MyDBHandler dbHandler = new MyDBHandler(this, null, null, 1);

        lst.setText(dbHandler.loadHandler());
        studentid.setText("");
        studentname.setText("");
    }

    public void addStudent(View view) {
        MyDBHandler dbHandler = new MyDBHandler(this, null, null, 1);
        int id = Integer.parseInt(studentid.getText().toString());
        String name = studentname.getText().toString();
        Student student = new Student(id,name);
        dbHandler.addHandler(student);
        studentid.setText("");
        studentname.setText("");

    }

    public void findStudent(View view) {
        MyDBHandler dbHandler = new MyDBHandler(this, null, null, 1);
        Student student = dbHandler.findHandler(studentname.getText().toString());
        if (student != null) {
            lst.setText(student.getID() + " " + student.getStudentName() + System.getProperty("line.separator"));
            // lst  = findViewById(R.id.lst);
            studentid.setText("");
            studentname.setText("");
        }else {
            lst.setText("No Match Found");
            studentid.setText("");
            studentname.setText("");
        }
    }


    public void removeStudent(View view) {
        MyDBHandler dbHandler = new MyDBHandler(this, null, null, 1);
        Boolean result = dbHandler.deleteHandler(Integer.parseInt(studentid.getText().toString()));
        if (result) {
            studentid.setText("");
            studentname.setText("");
            lst.setText("Record Deleted");
        } else
            studentid.setText("No Match Found");
    }

    public void updateStudent(View view) {
        MyDBHandler dbHandler = new MyDBHandler(this, null, null, 1);
        Boolean result = dbHandler.updateHandler(Integer.parseInt(studentid.getText().toString()), studentname.getText().toString());
        if (result) {
            studentid.setText("");
            studentname.setText("");
            lst.setText("Record Updated");
        } else
            studentid.setText("No Match Found");
    }
}
`

**and this is the db adapter**

package com.example.sqliteoperations;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class myDbAdapter {
    myDbHelper myhelper;
    public myDbAdapter(Context context)
    {
        myhelper = new myDbHelper(context);
    }

    public long insertData(String name, String pass)
    {
        SQLiteDatabase dbb = myhelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(myDbHelper.NAME, name);
        contentValues.put(myDbHelper.MyPASSWORD, pass);
        long id = dbb.insert(myDbHelper.TABLE_NAME, null , contentValues);
        return id;
    }

    public String getData()
    {
        SQLiteDatabase db = myhelper.getWritableDatabase();
        String[] columns = {myDbHelper.UID,myDbHelper.NAME,myDbHelper.MyPASSWORD};
        Cursor cursor =db.query(myDbHelper.TABLE_NAME,columns,null,null,null,null,null);
        StringBuffer buffer= new StringBuffer();
        while (cursor.moveToNext())
        {
            int cid =cursor.getInt(cursor.getColumnIndex(myDbHelper.UID));
            String name =cursor.getString(cursor.getColumnIndex(myDbHelper.NAME));
            String  password =cursor.getString(cursor.getColumnIndex(myDbHelper.MyPASSWORD));
            buffer.append(cid+ "   " + name + "   " + password +" \n");
        }
        return buffer.toString();
    }

    public  int delete(String uname)
    {
        SQLiteDatabase db = myhelper.getWritableDatabase();
        String[] whereArgs ={uname};

        int count =db.delete(myDbHelper.TABLE_NAME ,myDbHelper.NAME+" = ?",whereArgs);
        return  count;
    }

    public int updateName(String oldName , String newName)
    {
        SQLiteDatabase db = myhelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(myDbHelper.NAME,newName);
        String[] whereArgs= {oldName};
        int count =db.update(myDbHelper.TABLE_NAME,contentValues, myDbHelper.NAME+" = ?",whereArgs );
        return count;
    }

    static class myDbHelper extends SQLiteOpenHelper
    {
        private static final String DATABASE_NAME = "myDatabase";    // Database Name
        private static final String TABLE_NAME = "myTable";   // Table Name
        private static final int DATABASE_Version = 1;   // Database Version
        private static final String UID="_id";     // Column I (Primary Key)
        private static final String NAME = "Name";    //Column II
        private static final String MyPASSWORD= "Password";    // Column III
        private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+
                " ("+UID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+NAME+" VARCHAR(255) ,"+ MyPASSWORD+" VARCHAR(225));";
        private static final String DROP_TABLE ="DROP TABLE IF EXISTS "+TABLE_NAME;
        private Context context;

        public myDbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_Version);
            this.context=context;
        }

        public void onCreate(SQLiteDatabase db) {

            try {
                db.execSQL(CREATE_TABLE);
            } catch (Exception e) {
                Message.message(context,""+e);
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            try {
                Message.message(context,"OnUpgrade");
                db.execSQL(DROP_TABLE);
                onCreate(db);
            }catch (Exception e) {
                Message.message(context,""+e);
            }
        }
    }
}

**and this is student class**

   

package com.example.helloworld;

public class Student {
    // fields
    private int studentID;
    private String studentName;
    // constructors
    public Student() {}
    public Student(int id, String studentname){
        this.studentID=id;
        this.studentName = studentname;
    }
    // properties
    public void setlD(int id){
        this.studentID=id;
    }
    public int getID(){
        return this.studentID;
    }
    public void setStudentName(String studentname){
        this.studentName = studentname;
    }
    public String getStudentName(){
        return this.studentName;
    }
}   


дело в том что когда я запускаю приложение его работа но когда я вставляю в текстовое поле и нажимаю на кнопку приложение рушится и его данные не передаются в SQLite

Что я уже пробовал:

https://stackoverflow.com/questions/64470143/android-crash-when-connecting-to-sqlite[^]

David Crow

"...но когда я вставляю в текстовое поле и нажимаю на кнопку..."

Какое текстовое поле? Какая кнопка? Какой код выполняется в результате "press?"

"...приложение выйдет из строя..."

- Куда же? Создается ли исключение?

После нажатия кнопки" press " вы прошли через код с помощью отладчика?

Richard MacCutchan

- Я новичок в android и не очень хорошо осведомлен об этом."
И все же вам удалось написать довольно сложное приложение. Или этот код был написан кем-то другим?

1 Ответов

Рейтинг:
2

raddevus

Единственное, что произойдет в приложении, которое вы показали, - это то, что основная активность загрузится и отобразит что-то из-за вызова OnCreate:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


Поскольку OnCreate() вызывает только setContentView() и ничего больше, то ни один из методов, показанных ниже, даже не вызывается.

Таким образом, либо отсутствует код, либо приложение выходит из строя из-за чего-то совершенно не связанного.

Вам нужно заглянуть в Logcat и посмотреть, какие ошибки вы видите. Сбой точно сообщит вам, какое исключение произошло и в какой строке вашего кода оно произошло.