java.lang.NullPointerException:尝试调用虚方法long类

时间:2016-05-23 17:59:52

标签: java android

所以我想做的就是,我有一个用户名,一个用户个人档案和postimg 并且我试图将这些值插入到SQLdatabase中我首先将图像转换为字节数组,然后插入数据库但我收到错误

  

java.lang.NullPointerException:尝试调用虚拟方法' long   Classes.DBController.addRecord(Classes.posts)'在null对象上   参考

这是我的代码

MainActivity

  public class Main2Activity extends AppCompatActivity {
DBController db;
ListView datalist;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

}

public void test(View v) {
    Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.download);
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.PNG, 100, stream);
    byte[] nimg = stream.toByteArray();


    Bitmap bm1 = BitmapFactory.decodeResource(getResources(), R.drawable.bc);
    ByteArrayOutputStream stream1 = new ByteArrayOutputStream();
    bm1.compress(Bitmap.CompressFormat.PNG, 100, stream1);
    byte[] nimg1 = stream.toByteArray();

    posts obj = new posts();
    obj.setUsername("gitesh");
    obj.setUserProfileImg(nimg);
    obj.setPostImg(nimg1);
    long result  = db.addRecord(obj);
    if(result==-1) {
        Log.d("error","error");
    }
    else {
        datalist = (ListView) findViewById(R.id.listview);
        db = new DBController(this);
        List<posts> contacts = db.getAll();
        Adapter adp = new Adapter(this, R.layout.activity_main, contacts);
        datalist.setAdapter(adp);
        }


      }


}

DBController.class

  public class DBController implements DBConstants {
DBHandler handler;
SQLiteDatabase db;

public DBController(Context context) {
    handler = new DBHandler(context, dname, null, dversion);
}

public void open() {
    db = handler.getWritableDatabase();

}

public void close() {
    db.close();
}

public long addRecord(posts c) {
    open();
    ContentValues cv = new ContentValues();
    cv.put(c2, c.getUsername());
    cv.put(c3, c.getUserProfileImg());
    cv.put(c4, c.getPostImg());
    long d = db.insert(tname, null, cv);
    close();
    return d;
}

public List<posts> getAll() {
    List<posts> l = new ArrayList<>();
    String q = "SELECT * FROM " + tname;
    open();
    Cursor c = db.rawQuery(q, null);
    posts obj = null;
    if (c.moveToFirst()) {
        do {
            obj = new posts();
            obj.setUsername(c.getString(1));
            obj.setUserProfileImg(c.getBlob(2));
            obj.setPostImg(c.getBlob(3));
            l.add(obj);
        }
        while (c.moveToNext());
    }
    db.close();
    return l;
  }
  }   

错误

 05-23 23:16:29.034 2900-2900/com.example.gitesh.timeline E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: com.example.gitesh.timeline, PID: 2900
                                                                       java.lang.IllegalStateException: Could not execute method for android:onClick
                                                                           at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
                                                                           at android.view.View.performClick(View.java:5207)
                                                                           at android.view.View$PerformClick.run(View.java:21168)
                                                                           at android.os.Handler.handleCallback(Handler.java:746)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                           at android.os.Looper.loop(Looper.java:148)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5443)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
                                                                        Caused by: java.lang.reflect.InvocationTargetException
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
                                                                           at android.view.View.performClick(View.java:5207) 
                                                                           at android.view.View$PerformClick.run(View.java:21168) 
                                                                           at android.os.Handler.handleCallback(Handler.java:746) 
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                           at android.os.Looper.loop(Looper.java:148) 
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5443) 
                                                                           at java.lang.reflect.Method.invoke(Native Method) 
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
                                                                        Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'long Classes.DBController.addRecord(Classes.posts)' on a null object reference
                                                                           at com.example.gitesh.timeline.Main2Activity.test(Main2Activity.java:45)
                                                                           at java.lang.reflect.Method.invoke(Native Method) 
                                                                           at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                                                                           at android.view.View.performClick(View.java:5207) 
                                                                           at android.view.View$PerformClick.run(View.java:21168) 
                                                                           at android.os.Handler.handleCallback(Handler.java:746) 
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                           at android.os.Looper.loop(Looper.java:148) 
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5443) 
                                                                           at java.lang.reflect.Method.invoke(Native Method) 
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

1 个答案:

答案 0 :(得分:0)

似乎db从未实例化过。

onCreate方法中,您需要具备以下条件:

db = new DBController(this);