2013-05-04 50 views
0

這是類我得到一個空指針從它指向第65行無法找到空指針,請協助

public class searchlist extends ListActivity 
    { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    new loadSomeStuff().execute(); 
} 

public class loadSomeStuff extends AsyncTask<String, Integer, String[]> 
{ 
    ProgressDialog dialog; 

    protected void onPreExecute() 
    { 
    dialog = new ProgressDialog(searchlist.this); 
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    dialog.setMax(100); 
    dialog.show(); 
    } 
    @Override 
    protected String[] doInBackground(String... arg0) { 
     // TODO Auto-generated method stub 

     for(int i =0; i<20; i++) 
     { 
      publishProgress(5); 
      try 
      { 
      Thread.sleep(80); 
      } catch(InterruptedException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
     dialog.dismiss(); 
     int loops = search_page.returnlooped(); 
     int[] teacup = search_page.returnNumArray(); 
     sqlStuff searching = new sqlStuff(searchlist.this); 
     String[] IDSysNames = searching.getIDSysName(); 
     searching.close(); 

     String[] resultList = new String[loops]; 
     for(int i=0; i < loops; i++) 
     { 
      if(IDSysNames[teacup[i]] != null) 
      { 

      resultList[i].equals(IDSysNames[teacup[i]]); //Line 65 

      } 
     } 
     setListAdapter(new ArrayAdapter<String>(searchlist.this, android.R.layout.simple_list_item_1, resultList)); 
     return null; 
    } 

    protected void onProgressUpdate(Integer...progress) 
    { 
     dialog.incrementProgressBy(progress[0]); 
    } 
} 

這是上面的類使用的getIDSysname類。

public String[] getIDSysName() 
{ 
    String[] result = new String[0]; 

    try 
    { 
     String[] columns = new String[] {KEY_SYSNAME}; 
     Cursor c = ChemPal.query(DATABASE_TABLE, columns, null, null, null, null, null); 
     Log.d("SqlDStuff", "Cursor count: "+c.getCount()); 
     int iSysName = c.getColumnIndex(KEY_SYSNAME); 

     int i = 0; 
     for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ 
      i++; 
     } 

     result = new String[i]; 
     i = 0; 
     for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ 
      result[i] = c.getString(iSysName); 
      i++; 

     } 
    } 
    catch(Exception e) 
    { 

    } 

    return result; 
} 

如果需要其他東西,請在評論中提問,因爲目前這令我很沮喪。謝謝

+0

附加一個調試器並「打破異常」。檢查當前的值/表達式以找出什麼是null。提供援助。 – user2246674 2013-05-04 20:09:27

+0

我會給它一個去吧 – user1844616 2013-05-04 20:32:32

+0

哇不知道你能做到這一點,但我發現我所有的其他變量都很好,但所有的結果數組爲空,並沒有採取新的價值。 – user1844616 2013-05-04 20:41:03

回答

0

你分配一個字符串數組:

String[] resultList = new String[loops]; 
for (int i=0; i < loops; i++) { 
    if (IDSysNames[teacup[i]] != null) { 
     resultList[i].equals(IDSysNames[teacup[i]]); //Line 65 

有沒有它賴以調用equals任何字符串。

+0

你是什麼意思,沒有任何他們添加上面String [] IDSysNames = searching.getIDSysName(); – user1844616 2013-05-04 20:15:11

+0

@ user1844616在哪裏?在聲明'resultList'和調用'resultList'的內容'equals'之間沒有代碼。 'resultList'是一個空數組。 'IDSysNames'不相關;空值位於'resultList'中。 – 2013-05-04 20:16:10

+0

@ user1844616加上當結果立即被丟棄時調用'equals'有什麼意義? – 2013-05-04 20:17:24

0
dialog.dismiss(); 

您不能在doInBackground()上致電解僱。每個與UI線程相關的方法都必須在UI線程上調用。

嘗試:

runOnUiThread(new Runnable() { 

    public void run() { 
     dialog.dismiss(); 
    } 
}); 
+0

好的,但似乎與第65行的NPE無關。 – 2013-05-04 20:15:09

+0

setListAdapter(new ArrayAdapter (searchlist.this,android.R.layout.simple_list_item_1,resultList)) – user1844616 2013-05-04 22:10:44

0

setListAdapter(新ArrayAdapter(searchlist.this,android.R.layout.simple_list_item_1,resultList));

我不得不將此方法移動到onCreate();我不得不通過一個名爲onPostExecute的方法重新運行resultList值。

原來日誌貓組成的空指針不知道爲什麼。感謝球員,但我現在得到它。