I am receiving the following error:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
at midamcorp.com.burgerkingapp.gridAdapter.fillGrid(gridAdapter.java:53)
at midamcorp.com.burgerkingapp.gridAdapter.<init>(gridAdapter.java:39)
at midamcorp.com.burgerkingapp.lunchStandard.onCreate(lunchStandard.java:35)
The problem appears to be occuring in the gridApater class, but I am not sure why. Here is the code for gridAdapter:
package midamcorp.com.burgerkingapp;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Created by Kelly Marchewa on 3/22/2016.
*/
public class gridAdapter extends BaseAdapter {
private Context mContext;
private int isLto;
private int board;
public Cursor items;
public ArrayList<String> itemNames;
public int[] icons;
public int[] buildImages;
public gridAdapter(Context context) {
mContext = context;
}
public gridAdapter(Context context, int lto, int location) {
mContext = context;
isLto = lto;
board = location;
fillGrid();
}
private void fillGrid() {
databaseHelper dbHelper = new databaseHelper(mContext);
SQLiteDatabase db = dbHelper.getReadableDatabase();
items = db.rawQuery("SELECT " + databaseHelper.ITEM_NAME + ", " + databaseHelper.ICON + ", " + databaseHelper.IMAGE + " FROM " + databaseHelper.TABLE_NAME + " where " + databaseHelper.LTO + " = " + isLto + " and " + databaseHelper.LOCATION + " = " + board, null);
items.moveToFirst();
icons = new int[items.getCount()];
buildImages = new int[items.getCount()];
int counter = 0;
while(!items.isAfterLast()) {
itemNames.add(items.getString(items.getColumnIndex(databaseHelper.ITEM_NAME)));
icons[counter] = (items.getInt(items.getColumnIndex(databaseHelper.ICON)));
buildImages[counter] = (items.getInt(items.getColumnIndex(databaseHelper.IMAGE)));
counter++;
items.moveToNext();
}
items.close();
}
@Override
public int getCount() {
return itemNames.size();
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public Object getItem(int position) {
return buildImages[position];
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater layout = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layout.inflate(R.layout.grid_item, parent, false);
TextView gridItemName = (TextView)view.findViewById(R.id.gridItemName);
ImageView iconContainer = (ImageView)view.findViewById(R.id.gridItemIcon);
gridItemName.setText(itemNames.get(position));
iconContainer.setImageResource(icons[position]);
return view;
}
}
and the calling code:
i
mport android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.preference.Preference;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TableRow;
import android.widget.TextView;
public class lunchHome extends AppCompatActivity {
private SimpleCursorAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
int discriminator = 0;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lunch_home);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
databaseHelper dbHelper = new databaseHelper(this);
SQLiteDatabase db = dbHelper.getReadableDatabase();
SharedPreferences preferences = getSharedPreferences("config", MODE_PRIVATE);
if(preferences.getInt("Location", 2) == 3) {
discriminator = 3;
} else if(preferences.getInt("Location", 2) == 2){
discriminator = 2;
}
Button ltoButton = (Button)findViewById(R.id.lunchLTOButton);
Button standardButton = (Button)findViewById(R.id.lunchMainButton);
standardButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(lunchHome.this, lunchStandard.class);
startActivity(intent);
}
});
ltoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(lunchHome.this, lunchLTOs.class);
startActivity(intent);
}
});
Cursor results = db.rawQuery("SELECT _id, name, icon, buildImage FROM " + databaseHelper.TABLE_NAME + " WHERE location = " + discriminator + " and LTO = " + 1 + " LIMIT 3", null);
String[] from = new String [] {databaseHelper.ITEM_NAME};
int[] to = new int[] {R.id.newName};
adapter = new SimpleCursorAdapter(this, R.layout.item_list, results, from, to, 0);
final ListView listContainer = (ListView) findViewById(R.id.listContainer);
listContainer.setAdapter(adapter);
listContainer.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Cursor cursor = (Cursor) listContainer.getItemAtPosition(position);
int imageId = cursor.getInt(cursor.getColumnIndex("buildImage"));
Intent intent = new Intent(lunchHome.this, midamcorp.com.burgerkingapp.buildImage.class);
intent.putExtra("imageID", imageId );
startActivity(intent);
}
});
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
}
and the Activity it is supposed to go to:
public class lunchLTOs extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lunch_ltos);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
GridView grid = (GridView)findViewById(R.id.lunchLTOGrid);
SharedPreferences preferences = getSharedPreferences("config", MODE_PRIVATE);
int discriminator = 2;
if(preferences.getInt("Location", 2) == 3) {
discriminator = 3;
} else if(preferences.getInt("Location", 2) == 2){
discriminator = 2;
}
gridAdapter adapter = new gridAdapter(this, 1, discriminator);
grid.setAdapter(adapter);
grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(lunchLTOs.this, buildImage.class);
intent.putExtra("position", position);
startActivity(intent);
}
});
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
I apologize for all the questions, but truly, truly appreciate any help. I know perhaps one of the most obvious solutions might be that the database query is not returning anything. Personally (its complicated), but I am not in the position right now to set some breakpoints or logs to see if the query is returning results. However, I believe if it the problem were the query, I would probably be getting an error earlier, such as at "icons = new int[items.getCount()];", right? What else could it be? Than you so much!
Aucun commentaire:
Enregistrer un commentaire