2012-08-08 61 views
0

正在爲我的android應用開發一個類,它將隨機生成NPC及其統計信息。由於這些方法將被稱爲在不同的活動,把他們放在他們自己的班級是最好的。然而,讓它們包含的光標在正確工作時遇到了一些麻煩。從另一個包含光標的類中使用方法

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 

    public class startscreen extends Activity { 
     private dbhelper mydbhelper; 
     Intent intent; 


     /** Called when the activity is first created. */ 
      @Override 
      public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.startscreen); 
       mydbhelper = dbhelper.getInstance(startscreen.this); 
       } 


      public void onClickNew(View v){ 
      intent = new Intent(getBaseContext(), newgame.class); 
      startActivity(intent); 
      } 


      public void onClickLoad(View v){ 
      //intent = new Intent(getBaseContext(), mainmenu.class); 
      //startActivity(intent); 
       Generator obj = new Generator(); 
       obj.randomName(); 
      } 

我打電話給我的主菜單上的這個底部按鈕的方法,以便於測試。

import java.util.Random; 

import android.database.Cursor; 
import android.util.Log; 

public class Generator { 
    public dbhelper mydbhelper; 


    public String randomName(){ 
     Cursor name; 
     Random nameRandom = new Random(); 
     int first = nameRandom.nextInt(171)+1; 
     name = mydbhelper.getRandomName(first); //This is where I get the error. "NullPointerException" 
     String firstName = name.getString(name.getColumnIndex(dbhelper.KEY_FIRST)); 
     int last = nameRandom.nextInt(245)+1; 
     name = mydbhelper.getRandomName(last); 
     String lastName = name.getString(name.getColumnIndex(dbhelper.KEY_LAST)); 
     String fullName = firstName + " " + lastName; 
     Log.e(fullName, "was the generated name"); 

     return fullName; 

    } 

} 

如果我拿出遊標並放入一個stat字符串返回它工作正常。所以我不正確地處理這個遊標。不幸的是,辛格爾頓和其他課程的方法都是因爲我的缺點,所以希望這裏的某個人能夠解釋我做錯了什麼。

public Cursor getRandomName(int number){ 
     return myDataBase.query(NAME_TABLE, new String[]{KEY_ID, KEY_FIRST, KEY_LAST}, 
       KEY_ID + " = " + number , null, null, null, KEY_ID); 
    } 

這是我正在使用的遊標,位於我的dbhelper類中。

回答

1

mydbhelper在您的Activity類是一個不同的參考mydbhelper在您的Generator類。您需要在您的Generator課程中致電mydbhelper = dbhelper.getInstance()或在使用之前傳入參考。

一個快速的方法來做到這將是:

public String randomName(dbhelper mydbhelp) { 
    // code 
    name = mydbhelper.getRandomName(first); 
    // code 
    name.close 
} 

記住關閉兩個光標和你的數據庫,當你用它做。首先關閉光標。

相關問題