Моя цель - создать приложение под названием «Список покупок». У меня есть 3 вкладки, первая из которых называется «Просмотреть список», вторая: «Добавить рынок» и последняя: «Добавить продукт». У меня есть 2 счетчика на первой и последней вкладке, заполняемой из таблицы SQLite с именем «DATABASE_MARKETTABLE». На странице «Добавить рынок» я добавляю рынки в DATABASE_MARKETTABLE.
Моя проблема в том, что счетчик из последней вкладки «Добавить продукт» работает просто отлично, он получает все данные из DATABASE_MARKETTABLE (все рынки добавлены), но счетчик из «Просмотреть список» (первая вкладка) выдает мне исключение NULL POINTER. .
Вот мой код:
DatabaseHelper.class:
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + DATABASE_PRODTABLE + " (" +
KEY_PRODROWID + " INTEGER PRIMARY KEY, " +
KEY_PRODNAME + " TEXT NOT NULL, " +
KEY_PRODAMOUNT + " TEXT NO NULL, " +
KEY_AMOUNTTYPE + " TEXT NOT NULL, " +
KEY_MARKETID + " LONG);"
);
db.execSQL("CREATE TABLE " + DATABASE_MARKETTABLE + " (" +
KEY_MARKETROWID + " INTEGER PRIMARY KEY, " +
KEY_MARKETNAME + " TEXT NOT NULL);"
);
}.....
ArrayList<String> getMarkets(){
String[] columns = new String[]{KEY_MARKETROWID, KEY_MARKETNAME};
ArrayList<String> Markets = new ArrayList<String>();
Cursor c= myDatabase.query(DATABASE_MARKETTABLE, columns, null, null, null, null, null);
if(c.isLast()) {c.moveToFirst();}
int iName = c.getColumnIndex(KEY_MARKETNAME);
for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
Markets.add(c.getString(iName));
}
return Markets;
}
А в AddProductActiviy.class (вкладка «Добавить продукт»):
public void onStart()
{
DatabaseHelper info=new DatabaseHelper(this);
super.onStart();
try {
info.open();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayList<String> Markets=info.getMarkets();
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, Markets);
spinDept.setAdapter(spinnerArrayAdapter);
info.close();
}
И в ViewlistActivity.class (вкладка Viewlist), если я использую тот же код, он получает NULL POINTER EXCEPTION.
Честно говоря, я понятия не имею, почему не работает, и я попробовал потерянные решения, но ничего не работает.
Моя цель состоит в том, чтобы пользователь этого блесна показывал только продукты, связанные с рынком, выбранным из блесна.
EDIT:
ЗДЕСЬ МОИ ОШИБКИ:
11-16 00:20:27.594: E/AndroidRuntime(338): FATAL EXCEPTION: main
11-16 00:20:27.594: E/AndroidRuntime(338): java.lang.RuntimeException: Unable to start activity ComponentInfo{androidpack.namespace/androidpack.namespace.AndroidProjectActivity}: java.lang.RuntimeException: Unable to start activity ComponentInfo{androidpack.namespace/androidpack.namespace.ViewlistActivity}: java.lang.NullPointerException
11-16 00:20:27.594: E/AndroidRuntime(338): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.os.Handler.dispatchMessage(Handler.java:99)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.os.Looper.loop(Looper.java:123)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.app.ActivityThread.main(ActivityThread.java:3683)
11-16 00:20:27.594: E/AndroidRuntime(338): at java.lang.reflect.Method.invokeNative(Native Method)
11-16 00:20:27.594: E/AndroidRuntime(338): at java.lang.reflect.Method.invoke(Method.java:507)
11-16 00:20:27.594: E/AndroidRuntime(338): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-16 00:20:27.594: E/AndroidRuntime(338): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-16 00:20:27.594: E/AndroidRuntime(338): at dalvik.system.NativeStart.main(Native Method)
11-16 00:20:27.594: E/AndroidRuntime(338): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{androidpack.namespace/androidpack.namespace.ViewlistActivity}: java.lang.NullPointerException
11-16 00:20:27.594: E/AndroidRuntime(338): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.app.ActivityThread.startActivityNow(ActivityThread.java:1487)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.widget.TabHost.setCurrentTab(TabHost.java:326)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.widget.TabHost.addTab(TabHost.java:216)
11-16 00:20:27.594: E/AndroidRuntime(338): at androidpack.namespace.AndroidProjectActivity.onCreate(AndroidProjectActivity.java:30)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
11-16 00:20:27.594: E/AndroidRuntime(338): Caused by: java.lang.NullPointerException
11-16 00:20:27.594: E/AndroidRuntime(338): at androidpack.namespace.ViewlistActivity.onCreate(ViewlistActivity.java:51)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-16 00:20:27.594: E/AndroidRuntime(338): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
Кажется, что в ViewlistActivity.class spinDept.setAdapter (spinnerArrayAdapter); это проблема, но я не знаю почему.
EDIT. ЗДЕСЬ МОЯ ПРОСМОТР СПИСКА. КЛАСС
public class ViewlistActivity extends Activity {
Spinner spinDept;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.spinDept=(Spinner)findViewById(R.id.spinnerprost);
// setare continut din layout
setContentView(R.layout.viewlist);
TextView tv=(TextView)findViewById(R.id.tvSQLinfo);
//Afisare produse din baza de date
DatabaseHelper info= new DatabaseHelper(ViewlistActivity.this);
try {
info.open();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String data = info.getData();
info.close();
tv.setText(data);
//----------------------------------------------
try {
info.open();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayList<String> Markets=info.getMarkets();
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, R.layout.spinner, Markets);
spinDept.setAdapter(spinnerArrayAdapter);
info.close();
}