2016-01-19 15 views
0

打開從片段可讀數據庫中,我想實現像在以下項目無法在Android的

https://github.com/steventrigg/AlarmClock/tree/master/AlarmClock

我試圖用片段,而不是活動的數據庫。但是每當我將活動轉換爲片段時,它都無法訪問數據庫。

我用下面的方法訪問數據庫

public AlarmModel getAlarm(long id) { 
SQLiteDatabase db = this.getReadableDatabase(); //error is shown here 
String select = "SELECT * FROM " + Alarm.TABLE_NAME + " WHERE " + Alarm._ID + " = " + id; 

    Cursor c = db.rawQuery(select, null); 

    if (c.moveToNext()) { 
     return populateModel(c); 
    } 

    return null; 
} 

我的片段類是

public class AlarmListActivity extends Fragment { 

private AlarmListAdapter=new AlarmDBHelper(getActivity());; 
private AlarmDBHelper dbHelper; 
private Context mContext; 
ListView list; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    mContext = getContext(); 
    View view = inflater.inflate(R.layout.activity_alarm_list, container, 
      false); 
    list=(ListView) view.findViewById(R.id.listview); 

    FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      startAlarmDetailsActivity(-1); 

     } 
    }); 

    mAdapter = new AlarmListAdapter(getActivity(),dbHelper.getAlarms(),AlarmListActivity.this); 
    list.setAdapter(mAdapter); 
    ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Alarm List"); 

    return view; 
} 



    public void setAlarmEnabled(long id, boolean isEnabled) { 
    AlarmManagerHelper.cancelAlarms(getActivity()); 

    AlarmModel model = dbHelper.getAlarm(id); 
    model.isEnabled = isEnabled; 
    dbHelper.updateAlarm(model); 

    AlarmManagerHelper.setAlarms(getActivity()); 
} 

在logcat的只有它說,它不能獲得可讀數據庫。

回答

0

把下面的行放在onCreateView()方法。不要把它放在你放置它的地方。

private AlarmListAdapter=new AlarmDBHelper(getActivity()); 

,因爲它需要得到這不是在你宣佈它作爲getActivity()不會返回活動有範圍可用你的活動範圍。

+0

thnx。這看起來更乾淨 –

0

this.getReadableDatabase中的「this」引用片段 - 但是,它需要一個將作爲活動的上下文。嘗試getActivity()。getReadableDatabase();否則把下面的方法在片段:

@Override 
     public void onAttach(Activity activity) { 
     a=activity; 
     super.onAttach(activity); 
     } 

,並宣佈公共領域

Activity a; 

然後a.getReadableDatabase()在你的方法

+0

謝謝。我認爲扎漢薩澤瓦的答案很容易處理。 –