我的目標是製作一個名爲「Shopping list」的應用程序。我有3個標籤,第一個叫做:「View list」,第二個是:「Add Market 「和最後一個:」添加產品「。我在第一個和最後一個選項卡上有兩個調整器,從名爲」DATABASE_MARKETTABLE「的SQLite表中填充。在「添加市場」中,我將市場添加到DATABASE_MARKETTABLE。從SQLite填充Spinner時出現空指針異常[Java Android]
我的問題是,從最後一個標籤「添加產品」微調工作得很好,它從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。
老實說,我沒有任何想法,爲什麼不工作,我試圖失去的解決方案,但沒有任何作品。
我的目標是讓用戶使用該微調器僅顯示與從微調器中選擇的市場相關聯的產品。
編輯:
這裏是我的錯誤:
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);是問題,但我不知道爲什麼。
編輯。這是我的視角活動.CLASS
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();
}
你有沒有設置一些調試點,看看是什麼是空?堆棧跟蹤也告訴你到底是哪一行代碼引起了NPE。請張貼,以及。 – Jack
我加了我的錯誤。看來spinDept.setAdapter(spinnerArrayAdapter);是ViewlistActivity.class中的問題(對應於Viewlist選項卡) –
您可以發佈ViewListActivity.class中的代碼,因爲那是您說您認爲Null問題來自哪裏的原因? – Bryan