[英]Attempt to invoke virtual method on a null object reference
我有一個asyncTask,在DoInBackground方法中調用了DBHelper類,該類應返回SQLiteDB中的每一行。 但是,當DBHelper類方法檢索值被激發時,我得到了錯誤:
07-20 10:33:33.869:E / AndroidRuntime(22238):致命例外:AsyncTask#5 07-20 10:33:33.869:E / AndroidRuntime(22238):進程:com.test.test,PID:22238 07 -20 10:33:33.869:E / AndroidRuntime(22238):java.lang.RuntimeException:在執行doInBackground()07-20 10:33:33.869:E / AndroidRuntime(22238):android.os時發生錯誤。 AsyncTask $ 3.done(AsyncTask.java:300)07-20 10:33:33.869:E / AndroidRuntime(22238):at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)07-20 10:33 :33.869:E / AndroidRuntime(22238):在java.util.concurrent.FutureTask.setException(FutureTask.java:222)07-20 10:33:33.869:E / AndroidRuntime(22238):在java.util.concurrent。 FutureTask.run(FutureTask.java:242)07-20 10:33:33.869:E / AndroidRuntime(22238):at android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231)07-20 10:33 :33.869:E / AndroidRuntime(22238):at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)07-20 10:33:33.869:E / AndroidRuntime(22238):at jav a.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587)07-20 10:33:33.869:E / AndroidRuntime(22238):at java.lang.Thread.run(Thread.java:818)07 -20 10:33:33.869:E / AndroidRuntime(22238):由以下原因引起:java.lang.NullPointerException:嘗試在空對象引用07上調用虛擬方法'void test.ItemFolderP.setId(java.lang.String)' -20 10:33:33.869:E / AndroidRuntime(22238):在test.test.returnValues(testt.java:59)07-20 10:33:33.869:E / AndroidRuntime(22238):在test.test $ GetFProducts .doInBackground(test.java:107)07-20 10:33:33.869:E / AndroidRuntime(22238):在test.test $ GetFProducts.doInBackground(test.java:1)07-20 10:33:33.869:E / AndroidRuntime(22238):位於android.os.AsyncTask $ 2.call(AsyncTask.java:288)07-20 10:33:33.869:E / AndroidRuntime(22238):位於java.util.concurrent.FutureTask.run(FutureTask .java:237)07-20 10:33:33.869:E / AndroidRuntime(22238):...還有4個
這是DBHelper的代碼:
public class DBHelper{
private ItemFolderP item; //here I declare my item
這是獲取值的方法
public ItemFolderP returnValues(int index){
Cursor mRow= database.rawQuery("select * from " + CM_TABLE + " LIMIT 0, 4", null);
if (null!=mRow) {
mRow.moveToNext();
item.setId(Integer.toString(mRow.getInt(mRow.getColumnIndex("Id"))));
item.setTitle(mRow.getString(mRow.getColumnIndex("test")));
item.setCode(mRow.getString(mRow.getColumnIndex("code")));
item.setPrice(mRow.getString(mRow.getColumnIndex("price")));
item.setImageUrl(mRow.getString(mRow.getColumnIndex("url")));
}
return item;
}
這是項目類:
public class ItemFolderP {
public String id;
public String title;
public String codice;
public String price;
public String imageUrl;
public ItemFolderP(String id, String title, String codice, String price, String imageUrl) {
super();
this.title = title;
this.id = id;
this.price = price;
this.imageUrl = imageUrl;
}
//titolo
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
//id
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
//codice
public String getCode() {
return title;
}
public void setCode(String codice) {
this.title = codice;
}
//image Url
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
//id
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
我覺得該錯誤可能是由於我沒有將上下文傳遞給方法,但是我不知道如何解決它。 有人能幫我嗎?
您沒有在代碼中的任何地方給item
賦值,因此它始終為null
。 您應該替換此塊:
item.setId(Integer.toString(mRow.getInt(mRow.getColumnIndex("Id"))));
item.setTitle(mRow.getString(mRow.getColumnIndex("test")));
item.setCode(mRow.getString(mRow.getColumnIndex("code")));
item.setPrice(mRow.getString(mRow.getColumnIndex("price")));
item.setImageUrl(mRow.getString(mRow.getColumnIndex("url")));
與
item = new ItemFolderP(
Integer.toString(mRow.getInt(mRow.getColumnIndex("Id"))),
mRow.getString(mRow.getColumnIndex("test")),
mRow.getString(mRow.getColumnIndex("code")),
mRow.getString(mRow.getColumnIndex("price")),
mRow.getString(mRow.getColumnIndex("url")));
另外,我不認為item
應該是私有字段,因為它僅在returnValues
方法內使用。 局部變量就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.