0

NPCとその統計をランダムに生成するAndroidアプリのクラスの開発に取り組んでいます。これらのメソッドはさまざまなアクティビティで呼び出されるため、独自のクラスに配置するのが最適です。それでも、含まれているカーソルを正しく機能させるのに問題があります。

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;

    }

}

カーソルを取り出して統計文字列を入力して返すと、正常に機能します。したがって、このカーソルを誤って処理しています。悲しいことに、シングルトンと他のクラスのメソッドを使用することは私の欠点の1つなので、ここの誰かが私が間違っていることを説明できることを願っています。

  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クラスにある、作業中のカーソルです。

4

1 に答える 1

2

mydbhelperクラス内は、クラス内Activityとは異なる参照です。使用する前に、クラスを呼び出すか、参照を渡す必要があります。mydbhelperGeneratormydbhelper = dbhelper.getInstance()Generator

それを行う簡単な方法は次のとおりです。

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

使い終わったら、カーソルとデータベースの両方を閉じることを忘れないでください。最初にカーソルを閉じます。

于 2012-08-08T19:14:06.117 に答える