我是人,我有一个很大的问题:我正在用Db创建我的第一个Android应用程序,这是我用java和OOP的第二周。
这是主要活动的来源:
public class EpsoftSMSActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final MyDatabase db=new MyDatabase(getApplicationContext());
db.open(); //apriamo il db
if (db.listaParametri().getCount()==0)
{
setup_parametri();
/*final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.login);
dialog.setTitle("Login");
dialog.setCancelable(true);
//there are a lot of settings, for dialog, check them all out!
//set up button
Button registra = (Button) dialog.findViewById(R.id.registra);
registra.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String username = dialog.findViewById(R.id.username).toString();
String password = dialog.findViewById(R.id.password).toString();
db.inserimentoParametri(username, password);
dialog.dismiss();
}
});
Button annulla = (Button) dialog.findViewById(R.id.annulla);
annulla.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
//now that the dialog is set up, it's time to show it
dialog.show();*/
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.layout.menu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.chiudi:
finish();
System.exit(0);
return true;
case R.id.setup:
setup_parametri();
return true;
case R.id.info:
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog);
dialog.setTitle("Informazioni & Credits");
dialog.setCancelable(true);
//there are a lot of settings, for dialog, check them all out!
/* //set up text
TextView text = (TextView) dialog.findViewById(R.id.TextView01);
//text.setText(R.string.lots_of_text);
//set up image view
ImageView img = (ImageView) dialog.findViewById(R.id.ImageView01);
img.setImageResource(R.drawable.ic_launcher);*/
//set up button
//set up button
Button button = (Button) dialog.findViewById(R.id.Button01);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
//now that the dialog is set up, it's time to show it
dialog.show();
return true;
}
return super.onOptionsItemSelected(item);
}
public void setup_parametri()
{
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.login);
dialog.setTitle("Login");
dialog.setCancelable(true);
//there are a lot of settings, for dialog, check them all out!
//set up button
Button registra = (Button) dialog.findViewById(R.id.registra);
registra.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String username = dialog.findViewById(R.id.username).toString();
String password = dialog.findViewById(R.id.password).toString();
db.inserimentoParametri(username, password);
dialog.dismiss();
}
});
Button annulla = (Button) dialog.findViewById(R.id.annulla);
annulla.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
//now that the dialog is set up, it's time to show it
dialog.show();
}
}
在最新的函数中,名为“setup_parametri”,我尝试调用“db.inserimentoParametri”,但Eclipse告诉我“db无法解析”。 Db在oncreate中定义。
的WhatsUp? TNX。
答案 0 :(得分:2)
db
是在onCreate()
内声明的局部变量。任何其他方法都看不到它。您可能希望将其设置为Activity类的实例字段,这意味着它将可用于该类的所有方法。
在onCreate()
之外声明字段,但在里面初始化它。像这样:
private MyDatabase db;
@Override
public void onCreate(Bundle savedInstanceState) {
....
db = new MyDatabase(getApplicationContext());
答案 1 :(得分:1)
您已将db声明为onCreate()
中的变量而未将其传递给setup_parametri()
你需要把它变成一个类变量:
public class EpsoftSMSActivity extends Activity {
/** Called when the activity is first created. */
final MyDatabase db;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
db = new MyDatabase(getApplicationContext());
db.open(); //apriamo il db
或将setup_parametri()
的签名更改为setup_parametri(MyDatabase db)
答案 2 :(得分:0)
运行OnClickerListener事件处理程序时,DB变量不在范围内。
将db定义移动到onCreate方法范围之外,即使其成为成员变量。