【问题标题】:External Sqlite database, can't insert into database,android studio外部Sqlite数据库,无法插入数据库,android studio
【发布时间】:2019-02-10 03:10:20
【问题描述】:

你们知道这段代码有什么问题吗?当我单击按钮将数据插入 sqlite 外部数据库时。但它似乎不起作用。错误显示在cv.put("name", txn.getName()); 也许是我写错了?

Java 页面

 public void onClick(View v) {
            try {
                SQLiteDatabase db = mSQLiteHelper.getWritableDatabase();
                ContentValues cv = new ContentValues();
                cv.put("name", txn.getName());
                cv.put("address", txn.getAddress());
                cv.put("phone", txn.getPhone());
                db.insert("Table1", null, cv);
                db.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

这里是错误异常说

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.waiku.work2.Model.getName()' on a null object reference

这是我的 OOP 模型,我有点困惑它是如何工作的。但我遵循了 youtube 教程...

public class Model {
    private int id;
    private String name;
    private String address;
    private int phone;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public int getPhone() {
        return phone;
    }

    public void setPhone(int phone) {
        this.phone = phone;
    }
}

这是我的 SQLite 助手

 public class SQLiteHelper extends SQLiteAssetHelper {
private static final String DB_NAME = "MyExternalDatabase.db";
private static final int DATABASE_VERSION = 1;

public SQLiteHelper(Context context) {
    super(context, DB_NAME, null, DATABASE_VERSION);
}

【问题讨论】:

  • txn 为空。你从哪里得到那个模型类?
  • 在java页面。我输入了public static Model txn; 所以它是模型。内部模型有“名称”“地址”和“电话”。 @sunilsunny

标签: android sqlite oop android-sqlite


【解决方案1】:

当应用程序尝试使用 具有 null 值的对象引用。

试试这个方法,

try {
                SQLiteDatabase db = mSQLiteHelper.getWritableDatabase();
                ContentValues cv = new ContentValues();
                Model  modelOBJ = new Model();
                cv.put("name", modelOBJ.setName(your_name_textOBJ.getText().toString());
                cv.put("address", modelOBJ.setAddress(your_address_textOBJ.getText().toString());
                cv.put("phone",modelOBJ.setPhone(your_phone_textOBJ.getText().toString());
                db.insert("Table1", null, cv);
                db.close();
                } 
                catch (Exception e) 
               {
                e.printStackTrace();
               }

【讨论】:

  • 你的“你的名字”是什么意思?在java页面,我已经初始化了public static Model txn;
  • @LeonZaii 你应该在那里传递字符串值。
  • 我收到错误提示“无法解析方法'put(java.lang.String,void)'”
  • 我在这里呆了将近 3 天,非常头疼...谢谢。
【解决方案2】:

您在空对象引用上得到“Model.getName()”可能是您没有初始化模型类。这样做:

 YourModelClassName txn= new YourModelClassName ();   // initialize your model class first
 txn.setName(youNameEditext.getText().toString()); // set entered name in model class
 public void onClick(View v) {
        try {
            SQLiteDatabase db = mSQLiteHelper.getWritableDatabase();
            ContentValues cv = new ContentValues();
            cv.put("name", txn.getName());  // get the entered name here.
            cv.put("address", txn.getAddress());
            cv.put("phone", txn.getPhone());
            db.insert("Table1", null, cv);
            db.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

【讨论】:

  • @LeonZaii :) 如果它对您有用,您可以将其标记为正确......对未来的访问者也有帮助。谢谢
  • 我已经标记为正确了...但是怎么会不断地返回呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多