2014-02-28 3 views
2

안녕하세요 "KnowledgeBaseHelper"라는 SQLiteOpenHelper를 확장하는 클래스가 있습니다. Activity를 확장하는 클래스가있는 동안 잠시 사용했지만 ListActivity를 ListFragment로 사용하기로 결정했다면 문제는 "KnowledgeBaseHelper helper = new KnowledgeBaseHelper와 같은 KnowledgeBaseHelper라는 클래스를 인스턴스화하려고했을 때 문제가 발생했습니다. (ListActivity.this); " 그것은 나에게 "생성자 KnowledgeBaseHelper (ListActivity)가 정의되지 않았습니다"라는 오류를냅니다.ListFragment에서 SQLiteOpenHelper 클래스를 인스턴스화하는 방법은 무엇입니까?

이것은 대개 ListActivity를 확장 할 때 작동하지만 현재는이 오류가 있습니다. 인스턴스화가 ListActivity 및 FragmentActivity와 다른가? 난 단지 몇 가지를 포함하기로 결정 그래서

감사합니다 아래

내 코딩 SQLiteOpenHelper를 들어

public class ListActivity extends ListFragment { 
    ArrayList<String> symptomList; 
    String name; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     return inflater.inflate(R.layout.fragment_generalsymptoms, container, 
      false); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onActivityCreated(savedInstanceState); 

     new LoadSymptoms().execute(); 
    } 

    class LoadSymptoms extends AsyncTask<String, String, String> { 

    @Override 
    protected String doInBackground(String... params) { 
     // TODO Auto-generated method stub 
      KnowledgeBaseHelper helper = new KnowledgeBaseHelper(
       ListActivity.this); 

      return null; 
    } 
} 

이다, 나는 아주 긴 코드 및 방법이있다.

public class KnowledgeBaseHelper extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 1; 

    private static final String DATABASE_NAME = "docdroid"; 

    //... I deleted the following lines   

    public KnowledgeBaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
      .permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 

     // Create Clinic Table 
     createTable(db, TABLE_CLINIC, CLINIC_COLUMN); 
     //... I deleted the following lines 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CLINIC); 
     onCreate(db); 
     //... I deleted the following lines 
    } 
} 

Fragments에서 SQLiteOpenHelper를 확장하는 클래스를 인스턴스화하는 다른 방법이 있습니까?

답변

2

KnowledgeBaseHelper 생성자로 전달해야하는 인수는 Context입니다.

Activity는 -AContext입니다. 따라서 this을 활동에서 사용할 수 있습니다.

FragmentContext이 아니므로 this을 조각에 사용할 수 없습니다.

조각에 getActivity()을 사용하면 호스팅 활동 (-a Context)에 대한 참조를 얻을 수 있습니다.

+0

감사합니다. @laalto! 매력처럼 일했습니다. 죄송합니다. 답변을 투표 할 담당자가 충분하지 않습니다. – sander126

+0

@ sander126 다음이 대답을 수락하십시오. –

+0

눈금을 클릭하십시오. 나는 표를 똑딱 거리기 위해 몇 분을 기다려야한다. 이제 끝내 버렸습니다. 고마워요! – sander126

관련 문제