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