2013-01-17 6 views
0

안드로이드의 다른 클래스에 액세스 할 때 문제가 발생했습니다 ... 클래스 databasex (정적이 아닙니다) 및 클래스 CountingFragment (정적) ... CountingFragment에 데이터베이스 x 클래스에 액세스하려고하는데 .. 결과가 null입니다. .... 것은 여기에 코드 내 조각 ...다른 클래스의 static (android)?

클래스 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 
    */ 
    } 

는 내가 코드 B를 생각한다 엘로우가 내 문제 야.

DataBase con=new DataBase(getSherlockActivity()); 

정적이 아닌 클래스에서 코드를 사용하는 경우 모든 것이 정상이지만 ....하지만 정적 클래스에서는 할 수 없다 ... 왜?

DataBase con=new DataBase(this); 

답변

2

에는 null 값이 없어야합니다 (Fragment들에 문서를 참조하십시오. 구체적으로 lifecycle입니다. 먼저 프래그먼트가 액티비티에 첨부됩니다 (그리고 onAttach()이 호출됩니다. Activity 인스턴스.

DataBasex con=new DataBasex(getSherlockActivity()); 

은 클래스 루트에 있고, null을 반환합니다. 조각에는 배트에서 벗어난 활동이 없습니다.

DataBasex con; 

그리고이 방법을 추가 :

변경

DataBasex con=new DataBasex(getSherlockActivity()); 

는 그래서입니다

@Override 
public void onCreate (Bundle b) 
{ 
    super.onCreate (b); 
    con = new DataBasex(getSherlockActivity()); 
} 
+0

again..i 정말 감사합니다, 당신이 내 문제를 해결되었습니다 ... :) – ltvie

0

정적 클래스가 어떤 객체 수 없습니다, 그리고 방법의 접근이 클래스 수준의 액세스 될 것입니다,하지만 아무도 정적 인 클래스에 해당 클래스의 객체가되기 때문에 그 이유는, 그들이 활동을 반환하기 전에 다음 인해 Fragment의 필요 처음 에 활동에 부착 할 수 있다는 사실에이 없음 정적 인 클래스

관련 문제