将值传递给数据库类时出错

时间:2018-04-28 20:25:48

标签: android nullpointerexception android-sqlite

MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    editText = (EditText) findViewById(R.id.entrurl);
    button =(Button)findViewById(R.id.button);
    WebView = (WebView) findViewById(R.id.webView);


   button.setOnClickListener(new View.OnClickListener() {
        @SuppressLint("SetJavaScriptEnabled")
        @Override
        public void onClick(View v) {
            String url =editText.getText().toString();
            db.AddHistory(url);
            WebView.getSettings().setLoadsImagesAutomatically(true);
            WebView.getSettings().setJavaScriptEnabled(true);
            WebView.getSettings().getBuiltInZoomControls();
            WebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
            WebView.loadUrl("https://"+url);
            WebView.setWebViewClient(new Mybrowser());
            }
    });
}

历史课程" historydb"

public class historydb extends SQLiteOpenHelper {

    public static final String DB_NAME ="SurfIt_DB";   
    private static final int DB_VERSION = 1; 
    public historydb(Context context)
    {    
        super(context,DB_NAME,null,DB_VERSION); 
    }
    @Override

    public void onCreate(SQLiteDatabase db) 
    { 
        db =getReadableDatabase();

        String sqlhistory = "CREATE TABLE IF NOT EXISTS HISTORY(id INTEGER PRIMARY KEY AUTOINCREMENT, history VAECHAR);";    
        db.execSQL(sqlhistory);
    }
    public void AddHistory(String his)
    {   
        SQLiteDatabase db =getWritableDatabase();    
        ContentValues contentValues = new ContentValues();
        contentValues.put("history", his);
        db.insert("HISTORY",null,contentValues);
        db.close();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int j) 

    {
        String sqlhistory = "DROP TABLE IF EXISTS HISTORY";
        db.execSQL(sqlhistory);
        onCreate(db);
    }
}

错误

---------崩溃的开始

04-29 01:28:27.649 5068-5068/com.example.apoorv.surfit E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.apoorv.surfit, PID: 5068
    java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.apoorv.surfit.historydb.AddHistory(java.lang.String)' on a null object reference
        at com.example.apoorv.surfit.MainActivity$1.onClick(MainActivity.java:47)
        at android.view.View.performClick(View.java:5269)
        at android.view.View$PerformClick.run(View.java:21548)
        at android.os.Handler.handleCallback(Handler.java:815)
        at android.os.Handler.dispatchMessage(Handler.java:104)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:5740)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:766)
抱歉收缩不好 我不明白其中有什么错误

1 个答案:

答案 0 :(得分:0)

您收到空指针异常,因为变量 db db.AddHistory(url);

时为空

很可能你有historydb db;这样的代码只声明 db 它没有实例化(设置)db对象,因此它可能为null。

您需要实例化数据库,例如在使用 db = new historydb(this); 之前db

我建议使用: -

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    db = new historydb(this); //<<<< ADDED

    editText = (EditText) findViewById(R.id.entrurl);
    button =(Button)findViewById(R.id.button);
    WebView = (WebView) findViewById(R.id.webView);


   button.setOnClickListener(new View.OnClickListener() {
        @SuppressLint("SetJavaScriptEnabled")
        @Override
        public void onClick(View v) {
            String url =editText.getText().toString();
            db.AddHistory(url);
            WebView.getSettings().setLoadsImagesAutomatically(true);
            WebView.getSettings().setJavaScriptEnabled(true);
            WebView.getSettings().getBuiltInZoomControls();
            WebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
            WebView.loadUrl("https://"+url);
            WebView.setWebViewClient(new Mybrowser());
            }
    });
}
  • 有关已添加的单行,请参阅//<<<< ADDED