我正在開發一個Android應用程序,但我被卡在刪除我的數據庫中的東西! 我得到了「不能引用非內部類中定義的非最終變量數據庫」錯誤!我知道這個錯誤意味着什麼,但我似乎無法找到解決辦法。不能引用在一個不同的方法中定義的內部類中的非最終變量數據庫
這裏是我的代碼
package iwt.ehb.be.capita_selecta;
//my imports
public class RemoveActivity extends Activity {
Context context = this;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.remove_activity);
DBAdapter db = new DBAdapter(this);
db.open();
Cursor c = db.getAllTrips();
if(c.moveToFirst())
{
LinearLayout layout = (LinearLayout) findViewById(R.id.layout_removeTrips);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(5, 5, 5, 5);
do {
Button buttonView = new Button(this);
buttonView.setBackgroundResource(R.layout.btn_blue);
buttonView.setLayoutParams(lp);
buttonView.setText(c.getString(1) + " @ " + c.getString(2));
final int id_trip = c.getInt(0);
buttonView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println(id_trip);
AlertDialog.Builder alert = new AlertDialog.Builder(context).setTitle("Attention");
alert.setMessage("Do you wish to delete this trip?");
alert.setIcon(R.drawable.icon);
alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
db.deleteSpecificRecord(id_trip);
}
});
alert.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
alert.show();
}
});
layout.addView(buttonView);
} while (c.moveToNext());
}
db.close();
//*******************
//BACK-button
//*******************
Button back = (Button) findViewById(R.id.back);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
setResult(RESULT_OK, intent);
finish();
}
});
}
}
而我得到的錯誤在這行代碼db.deleteSpecificRecord(id_trip);
如果你對我怎麼能解決這個,這將是要命的任何想法;)
THX 凱文
或者您也可以叫爲'AlertDialog.Builder警報=新AlertDialog.Builder(v.getContext())的setTitle( 「注意」);'。把整個堆棧跟蹤可能會更有用,因爲問題可能來自其他地方:) – ccheneson 2011-04-30 17:09:56
Thx爲您的答案,但那不是我的問題。我說我在「db.deleteSpecificRecord(id_trip);」如果我註釋掉這行代碼,一切工作正常。當我嘗試刪除評論,然後數據庫獲得紅色下劃線,並說我的問題是「不能指一個......」 – Kevin 2011-05-01 10:26:34
那麼故事是一樣的。您無法訪問它,因爲您處於內部類中,因此無法訪問該類中的變量。 OnClickListener是您正在實現的抽象方法的接口。不允許混淆db變量,因爲它在RemoveActivity中。要麼做他所說的話,並使其成爲最終變量或使RemoveActivity實現該接口。然後在RemoveActivity類中創建一個db字段。 – 2011-05-01 18:58:27