мое приложение рушится, когда я пытаюсь начать работу, где у меня есть список. Я пытаюсь получить данные sqlite в списке. Отчет об ошибке:Почему мое приложение падает при попытке заполнить список из базы данных sqlite?
04-05 14:11:47.479 2781-2781/? E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jonnyg.gardenapp/com.jonnyg.gardenapp.SeedSave}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.jonnyg.gardenapp.SeedSave.populateListView(SeedSave.java:197)
at com.jonnyg.gardenapp.SeedSave.onCreate(SeedSave.java:85)
at android.app.Activity.performCreate(Activity.java:5104)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
DataBaseHelperClass код Релевент:
public class DataBaseHelper extends SQLiteOpenHelper {
private static final String DataBASE_NAME = "SeedSave.db";
private static final String TABLE_NAME = "seed_table";
//public static final String COL_1 = "ID";
private static final String COL_2 = "SNAME";
private static final String COL_3 = "STYPE";
private static final String COL_4 = "SAMOUNT";
private static final int Version = 1;
private static Context myContext;
/*String name, SQLiteDatabase.CursorFactory factory, int version*/
public DataBaseHelper(Context context) {
super(context, DataBASE_NAME, null, Version);
//SQLiteDatabase db = this.getWritableDatabase();
myContext = context;
}
создания таблицы самой
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, SNAME TEXT, STYPE TEXT,SAMOUNT INTEGER)");
}
в том же хелперов базы данных класса я получить запрос
public Cursor getAllData(){
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select ID AS _id,SNAME,STYPE,SAMOUNT from " + TABLE_NAME,null);
/*if(res!=null){
res.moveToFirst();
}*/
return res;
}
изменение SQLiteDatabase db = this.getWritableDatabase(); SQLiteDatabase db = this.getReadableDatabase(); не имело заметных эффектов.
сейчас в моей деятельности я хочу запустить просмотр списка, я вызываю этот метод внутри него.
private void populateListView(){
ListView myList_view;
myDb = new DataBaseHelper(this);
Cursor res = myDb.getAllData();
SeedSave mySeed = new SeedSave();
String[] from = new String[]{null,mySeed.editSname.toString(),
mySeed.editStype.toString(),mySeed.editSamount.toString()};
int[] to = new int[]{R.id.textViewID,R.id.textViewName,R.id.textViewSType,R.id.textViewAmount
};
SimpleCursorAdapter myScursorAdapter;
myScursorAdapter = new SimpleCursorAdapter(getBaseContext(),
R.layout.item_layout_seed, res, from,to,0);
myList_view = (ListView)findViewById(R.id.listViewTest);
myList_view.setAdapter(myScursorAdapter);
}
Я думаю, что probem лежит пользовательского макета, или С и переменных не выстраиваются в очередь, данные, необходимые правильно.
сейчас для моей таблицы семян, в которой я передаю значения конструктору для добавления данных.
public class Seed_Table {
private int _id;
private String _seedName;
private String _seedType;
//private String _amount;
private int _amount;
public Seed_Table(){
}
public Seed_Table(String sname, String stype, int amount) {
this._seedName = sname;
this._seedType = stype;
this._amount = amount;
}
public void set_id(int _id) {
this._id = _id;
}
public void set_seedName(String _seedName) {
this._seedName = _seedName;
}
public void set_seedType(String _seedType) {
this._seedType = _seedType;
}
public void set_amount(int _amount) {
this._amount = _amount;
}
public int get_id() {
return _id;
}
public String get_seedName() {
return _seedName;
}
public int get_amount() {
return _amount;
}
public String get_seedType() {
return _seedType;
}
}
Следующая что мой заказ линейная планировка:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textViewID" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textViewName" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textViewSType" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textViewAmount"
android:layout_marginBottom="30dp"/>
/>
есть проблема с созданием представления данных linerly? когда ориентация = вертикальная. должно ли оно быть горизонтальным ?. как я хочу, чтобы данные были посмотреть ниже: UI of layout
представление находится на активности я хочу use.below код для самого ListView:
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:id="@+id/listViewTest"
android:layout_below="@+id/btnAdd"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
Im я также добавление, как я добавьте данные в базу данных в случае, если это может помочь. в классе dataBaseHelper я передать значения в конструктор Seed_Table:
public void addSeed(Seed_Table seed){
ContentValues values = new ContentValues();
values.put(COL_2, seed.get_seedName());
values.put(COL_3, seed.get_seedType());
values.put(COL_4, seed.get_amount());
SQLiteDatabase db = getWritableDatabase();
long rowInserted = db.insert(TABLE_NAME, null, values);
if(rowInserted != -1) {
insertToast();
}
else{
noInsertToast();
}
db.close();
}
Приведенный ниже метод вызывается в методе OnCreate предполагаемой активности.
public void AddData(){
btnAddData.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
int quantity = Integer.parseInt(editSamount.getText().toString());
Seed_Table seed = new Seed_Table(
editSname.getText().toString(),
editStype.getText().toString(),
//editSamount.getText().toString()
quantity
);
myDb.addSeed(seed);
if(editSname.getText().length() != 0 &&
editStype.getText().length() != 0 &&
editSamount.getText().length() != 0){
editSname.getText().clear();
editStype.getText().clear();
editSamount.getText().clear();
}
//Toast.makeText(SeedSave.this, "Data Inserted", Toast.LENGTH_LONG).show();
}
catch (Exception e){
e.printStackTrace();
//Toast.makeText(SeedSave.this, "Data not Inserted", Toast.LENGTH_LONG).show();
}
}
}
);
}
В настоящее время я просматриваю данные через alertDialog.builder и строковый конструктор. Который я хочу изменить в виде списка, потому что он может выглядеть abit tider и может фактически нажимать на отдельные строки для выполнения действия. Ниже показано, как я просматриваю данные, если это помогает: в активности, которую я хочу использовать, я вызываю этот метод в onCreate.
public void veiwAll(){
btnViewAll.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
//res holds the data from the database
Cursor res = myDb.getAllData();
if(res.getCount() == 0){
// show message
showMessage("Error", "No Data in Database");
return;
}
StringBuffer myBuff = new StringBuffer();
while (res.moveToNext()){
myBuff.append("Id :"+ res.getString(0)+"\n");
myBuff.append("Name :"+ res.getString(1)+"\n");
myBuff.append("Type :"+ res.getString(2)+"\n");
myBuff.append("Amount :"+ res.getString(3)+"\n\n");
}
// show data
showMessage("Data",myBuff.toString());
}
}
);
}
также смотрите:
public void showMessage(String title,String message){
AlertDialog.Builder myBuilder = new AlertDialog.Builder(this);
myBuilder.setCancelable(true);
myBuilder.setTitle(title);
myBuilder.setMessage(message);
myBuilder.show();
}
, который заканчивает тем, как This here
, который все отношение я верю, чтобы получить представление о том, как я создания таблицы добавить данные и извлечения данных. надеюсь, это поможет найти, где проблема.
Пожалуйста, ваши код как текст –
вы можете оставить вам LogCat? – Sanoop
Пожалуйста, разместите свой журнал сбоев –