0

New to android, i'm trying to get my activity, AddingStoreActivity, to update my sqlite db but i'm getting this error java.lang.NullPointerException: Attempt to invoke virtual method 'long com.example.grocerylist.DatabaseHelper.insertStoreData(java.lang.String, java.lang.String)' on a null object reference.

I've done 2wks plus research, reviewed What is a NullPointerException, and how do I fix it? and java.lang.NullPointerException: Attempt to invoke virtual method on a null object reference to select sqlite, and made numerous searches but no such luck.

-----Main activity

package com.example.grocerylist;

import android.support.design.widget.AppBarLayout;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    DatabaseHelper groceriesDb;
    private TabLayout tabLayout;
    private AppBarLayout appBarLayout;
    private ViewPager viewPager;

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

        groceriesDb = new DatabaseHelper(this);

        tabLayout = findViewById(R.id.tabLayout_id);
        appBarLayout = findViewById(R.id.appBar_id);
        viewPager = findViewById(R.id.viewPager_id);
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

        //add fragments
        adapter.AddFragment(new GroceryListFragment(), "Grocery List");
        adapter.AddFragment(new AddStoreFragment(), "Add Store");
        adapter.AddFragment(new AddItemFragment(), "Add Items");
        //adapter setup
        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);

    }

}

-----AddingStoreActivity activity

package com.example.grocerylist;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class AddingStoreActivity extends AppCompatActivity implements View.OnClickListener {

    Button addStore;
    EditText storeName,storeAddress;
    MainActivity myActivity;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_adding_store);

        myActivity = new MainActivity();
        initializeViews();
        addStore.setOnClickListener(this);
    }

    private void initializeViews() {

        addStore = (Button) findViewById(R.id.addStoreButton);
        storeName =(EditText) findViewById(R.id.editTextStoreName);
        storeAddress =(EditText) findViewById(R.id.editTextAddress);
    }

    @Override
    public void onClick(View v) {

        //MainActivity myActivity = new MainActivity();
        myActivity.groceriesDb.insertStoreData(storeName.getText().toString(),storeAddress.getText().toString());

        //Bundle bundle = new Bundle();
        //bundle.putString("edttext", "From Activity");
        // set Fragmentclass Arguments
        //AddStoreFragment fragObj = new AddStoreFragment();
        //fragObj.setArguments(bundle);

        finish();
    }
}

-----DatabaseHelper.java

package com.example.grocerylist;

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

public class DatabaseHelper extends SQLiteOpenHelper {
    //declear DB name and table name
    public static final String DATABASE_NAME = "GROCERY_LIST.db";
    public static final String TABLE_NAME = "groceries_table";
    public static final String COL_1 = "ID";
    public static final String COL_2 = "ITEM";
    public static final String COL_3 = "STORE";
    public static final String COL_4 = "STORE_ADDRESS";
    public static final String COL_5 = "LAT_LONG";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
        //SQLiteDatabase db = this.getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sqlQuery = "CREATE TABLE " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, ITEM TEXT, STORE TEXT, STORE_ADDRESS TEXT, LAT_LONG TEXT)";
        db.execSQL(sqlQuery);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
        onCreate(db);
    }

    public long insertStoreData(String store, String store_address){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL_3, store);
        contentValues.put(COL_4, store_address);
        /*long result = db.insert(TABLE_NAME,null ,contentValues);

        if (result == -1)
            return false;
        else
            return true;*/
        return db.insert(TABLE_NAME,null ,contentValues);
    }
    public boolean insertItemData(String item) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL_2, item);
        long result = db.insert(TABLE_NAME, null, contentValues);

        if (result == -1)
            return false;
        else
            return true;
    }
}

-----LayoutXML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context=".AddingItemActivity">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="@color/colorPrimary"
        android:src="@drawable/groceryshopping" />


    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="250dp">


        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="15dp"
            android:layout_marginLeft="15dp"
            android:text="@string/store_name"
            android:textSize="24sp" />

        <EditText
            android:id="@+id/editTextStoreName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@id/textView3"
            android:ems="10"
            android:hint="@string/store_hint"
            android:inputType="textPersonName"
            android:layout_marginStart="10dp"
            android:layout_toEndOf="@id/textView3"
            android:autofillHints="@string/store_hint" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/textView3"
            android:layout_marginStart="15dp"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="20dp"
            android:text="@string/store_address"
            android:textSize="24sp" />

        <EditText
            android:id="@+id/editTextAddress"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@id/textView3"
            android:ems="10"
            android:hint="@string/store_address_hint"
            android:inputType="textPersonName"
            android:layout_marginStart="10dp"
            android:layout_toEndOf="@id/textView4"
            android:layout_below="@id/editTextStoreName"/>

        <Button
            android:id="@+id/addStoreButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="125dp"
            android:layout_marginLeft="125dp"
            android:layout_marginTop="100dp"
            android:layout_marginBottom="50dp"
            android:text="@string/save_button" />
    </RelativeLayout>


</RelativeLayout>

i'm trying to get my AddingStoreActivity to update the database when i click to close/save the entry. any and all suggestions would be GREATLY appreciated.

Thanks in advance

ClemDC
  • 21
  • 1
  • 4
  • Don't create activities in your code - the os creates them. As a temporary measure, move the `groceriesDb` creation to the AddingStoreActivity. (It's not used in the main activity anyways.) The final solution will be to make the database helper instance a singleton accessible from anywhere. –  Aug 03 '19 at 00:19
  • Awesome, thanks for the input, that worked. I'm going to search on how to make my db helper use singleton design. – ClemDC Aug 03 '19 at 00:54

0 Answers0