-1

我有一個名爲Tab1的片段,我從中調用名爲sendStatusTab1的方法並將結果存儲在String數組中。 sendStatusTab1進一步調用MyDBHandler中的retrieveStatus方法,該方法也返回一個數組。Android中使用字符串數組的空指針異常

我收到了NullPointerException,正如您在代碼中看到的,並提供了進一步的錯誤。

我該如何糾正它?

代碼爲Tab1片段:在MyDBHandler

public String[] sendStatusTab1(int table) { 
    arraystatus = dbHandler.retrieveStatus(arraystatus, table); 
    return arraystatus; 
} 

代碼的方法:在MainActivity2

package com.example.mrbrminocha.login; 

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import android.widget.ImageButton; 
import android.widget.TextView; 

import java.util.zip.Inflater; 

public class Tab1 extends Fragment { 
    ImageButton IB; 
    TextView parking_left; 
    String buttonID; 
    String arrayStatus[] = new String[86]; 
    int booked_counter=0; 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.tab_1,container,false); 

     arrayStatus = ((MainActivity2)this.getActivity()).sendStatusTab1(1); 

     for (int i = 0; i < 86; i++) { 
      buttonID = "button" + (i + 1); 
      int resID = getResources().getIdentifier(buttonID, "id", ((MainActivity2) this.getActivity()).getPackageName()); 
      IB = (ImageButton) v.findViewById(resID); 
      if (arrayStatus[i].equals("Booked")) { 
       booked_counter++; 
       IB.setImageResource(R.drawable.grey1); 
       IB.setClickable(false); 
      } 
     } 

     parking_left = (TextView) v.findViewById(R.id.counter); 
     parking_left.setText("Parking Left" + (86-booked_counter) + "/86"); 
     booked_counter = 0; 
     return v; 
    } 
} 

代碼方法示值誤差

public String[] retrieveStatus(String array[],int table) { 

    String table_name = ""; 
    switch (table) { 
     case 1: table_name = TABLE1; 
       break; 
    } 
    int index = 0; 
    String dbString = ""; 
    SQLiteDatabase db = getWritableDatabase(); 
    String query = "SELECT * FROM" + TABLE1 + "WHERE 1"; 

    Cursor c = db.rawQuery(query, null); 
    c.moveToFirst(); 

    while (!c.isAfterLast()) { 
     if (c.getString(c.getColumnIndex("buttonstatus")) != null) { 
      array[index++] = c.getString(c.getColumnIndex("buttonstatus")); 
     } 
     c.moveToNext(); 
    } 
    db.close(); 
    return array; 
} 

爲什麼我收到NullPointerException ,我該如何解決這個問題?

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] com.example.mrbrminocha.login.MyDBHandler.retrieveStatus(java.lang.String[], int)' on a null object reference 
    at com.example.mrbrminocha.login.MainActivity2.sendStatusTab1(MainActivity2.java:16 1) 
    at com.example.mrbrminocha.login.Tab1.onCreateView(Tab1.java:33) 

回答

1

你的sql查詢是錯誤的。你忘記了fromwhere之間的空格。 這是正確的查詢:

String query = "SELECT * FROM " + TABLE1 + " WHERE 1"; 
+0

感謝烏拉圭回合的答覆,但沒有例外,我的應用程序正在運行之前,我增加了一些新功能,其中包括我上面指定的代碼。這個查詢沒有問題。如果你有其他建議,回覆? –