0

私はアンドロイドで他のクラスにアクセスするのに問題があります...ここに私のコードがあります...

クラス Databasex

 public class DataBasex {
     public static final String KEY_ROWID="_id";
     public static final String KEY_NAME="namaLokasi";
     public static final String KEY_JENIS="jenis";
     public static final String KEY_KETERANGAN="ket";
     public static final String tanda="DataBasex";

     private static final String DATABASE_NAME="DbPeta";
     private static final String DATABASE_TABLE="lokasi";
     private static final int DATABASE_VERSION=1;

     private DbHelper ourHelper;
     private final Context ourContext;
     private SQLiteDatabase ourDatabase;

private static class DbHelper extends SQLiteOpenHelper{

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        Log.i(tanda,"dbHelper-> "+context);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        Log.i(tanda,"onCreate-> "+db);
        /*db.execSQL("CREATE TABLE " + DATABASE_TABLE + "("+
                KEY_ROWID +" INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_NAME +" TEXT NOT NULL, " + KEY_JENIS +" TEXT NOT NULL, " +
                KEY_KETERANGAN +" TEXT NOT NULL);");
                */
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        Log.i(tanda,"onUpgrade-> "+db);
        //db.execSQL("DROP TABLE IF EXISTS"+DATABASE_TABLE);
        //onCreate(db);
    }
}   
public DataBasex(Context c){
    ourContext =c;
    Log.i(tanda,"DataBasex-> "+ourContext);     
}

public DataBasex open() throws SQLException{
    Log.i(tanda,"DataBasex open awal ");
    ourHelper = new DbHelper(ourContext);
    ourDatabase=ourHelper.getWritableDatabase();
    Log.i(tanda,"DataBasex open-> "+ourDatabase);
    return this;
}
public void close(){
    Log.i(tanda,"[close]");
    ourHelper.close();
}
  }

ここに CountingFragment クラスがあります...

  public static class CountingFragment extends SherlockFragment {
    //here myproblem...
    DataBasex con=new DataBasex(getSherlockActivity());

     /**
     *other method
     */
  }

私は以下のコードが私の問題だと思います

 DataBase con=new DataBase(getSherlockActivity());

非静的クラスで次のコードを使用すると、すべて問題ありません....しかし、静的クラスではできません...なぜ??

 DataBase con=new DataBase(this);   
4

2 に答える 2

2

これは、最初Fragmentにs をアクティビティにアタッチする必要があるためです(アクティビティを返す前に s に関するドキュメントを参照してください。具体的にはライフサイクルです。最初にフラグメントがアクティビティにアタッチされます (そして呼び出されます。その後、フラグメントはActivity インスタンスを取得します。FragmentonAttach()

DataBasex con=new DataBasex(getSherlockActivity());

クラスのルートにある場合、null が返されます。フラグメントには、最初からアクティビティがありません。

変化する

DataBasex con=new DataBasex(getSherlockActivity());

つまり、次のとおりです。

DataBasex con;

そして、このメソッドを追加します:

@Override
public void onCreate (Bundle b)
{
  super.onCreate (b);
  con = new DataBasex(getSherlockActivity());
}
于 2013-01-17T02:36:43.857 に答える
0

その理由は、静的クラスにはオブジェクトがなく、メソッドのアクセスはクラスレベルのアクセスになるためですが、非静的クラスにはそのクラスのオブジェクトが存在するため、null 値は存在しないはずです。非静的クラスで

于 2013-01-17T02:36:31.890 に答える