-2

so what I'm trying to do is that,i have,a username,a userprofileimage and postimg and i'm trying to insert those values into SQLdatabase i'm first converting images into byte array and then inserting into database but i getting error

java.lang.NullPointerException: Attempt to invoke virtual method 'long Classes.DBController.addRecord(Classes.posts)' on a null object reference.

Here is my code

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;
  }
  }   

errors

 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) 
OneCricketeer
  • 179,855
  • 19
  • 132
  • 245
gitesh
  • 7
  • 3
  • 1
    What did you think would happen when you try to run a method on a variable before you assign it a value? – azurefrog May 23 '16 at 18:08
  • Advice: put all `findViewById` and any other initializations for your Activity inside `onCreate`. You successfully put `db = new DBController(this);` in the `else` statement, but not before you used `db` outside of it. – OneCricketeer May 23 '16 at 18:17

1 Answers1

0

it seems that db was never instantiated.

in the onCreate method you need to have the following:

db = new DBController(this);
f.khantsis
  • 3,256
  • 5
  • 50
  • 67