Android:将值传递给另一个 activity 的函数,然后传递给 Sqlite 数据库
Android: Passing values to another activity's function and then to Sqlite database
自从我开始 android studio 已经一个月了,此时我陷入了必须从 [= 传递一组 <EditText/>
值的地步16=] 到 UpdateActivity
,然后将这些值发送到 Sqlite 数据库以更新 table。
我的成就:
已成功将值从 MainActivity
的 <EditText/>
发送到 UpdateActivity
的 <EditText/>
我是如何做到的 MainActivity
:
public class MainActivity extends AppCompatActivity {
DatabaseHelper myDb;
EditText editName, editSurname, editMarks;
Button btnUpdate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myDb = new DatabaseHelper(this);
editName = (EditText) findViewById(R.id.UpdName);
editSurname = (EditText) findViewById(R.id.editTextSurname);
editMarks = (EditText) findViewById(R.id.UpdMarks);
btnUpdate = (Button)findViewById(R.id.btnUpdate);
btnUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String MainName = editName.getText().toString();
String MainSurname = editSurname.getText().toString();
String MainMarks = editMarks.getText().toString();
Intent UpdateAct = new Intent(MainActivity.this, UpdateActivity.class);
UpdateAct.putExtra("Name", MainName);
UpdateAct.putExtra("SurName",MainSurname );
UpdateAct.putExtra("Marks", MainMarks);
startActivity(UpdateAct);
}
});
}
然后在UpdateActivity
里面:
public class UpdateActivity extends AppCompatActivity {
DatabaseHelper myDb;
Button btnUpd;
EditText editTextId, editUpdtName, editUpdSurname, editUpdMarks;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update);
Intent getData = getIntent();
String Name = getData.getStringExtra("Name");
String SurName = getData.getStringExtra("SurName");
String Marks = getData.getStringExtra("Marks");
editTextId = (EditText)findViewById(R.id.editTextID);
editUpdtName = (EditText)findViewById(R.id.UpdName);
editUpdSurname = (EditText)findViewById(R.id.UpdSurname);
editUpdMarks = (EditText)findViewById(R.id.UpdMarks);
btnUpd = (Button)findViewById(R.Id.btnUpd);
editUpdtName.setText(Name);
editUpdSurname.setText(SurName);
editUpdMarks.setText(Marks);
}
我坚持的是将这些值发送到名为 updateData();
的函数
为此,我尝试将 MainActivity
中的值直接用于 UpdateActivity
但失败了,然后我尝试转换这些 <EditText/>
并在函数内部使用它但再次失败。
在我的 UpdateActivity
里面:
..//
editUpdtName.setText(Name);
editUpdSurname.setText(SurName);
editUpdMarks.setText(Marks);
//updateData(Name, SurName, Marks);
updateData();
}
//function definiton
// public void updateData(final String Name, final String SurName, final String Marks)
public void updateData()
{
btnUpd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// boolean isUpdated = myDb.updateData(editTextId.getText().toString(), Name,SurName, Marks);
boolean isUpdated = myDb.updateData(editTextId.getText().toString(), editUpdtName.getText().toString(),
editUpdSurname.getText().toString(), editUpdMarks.getText().toString());
if(isUpdated == true){
Toast.makeText(UpdateActivity.this, "Data Updated Successfully!", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(UpdateActivity.this, "Data NOT Updated!", Toast.LENGTH_SHORT).show();
}
}
});
}
}
每次调用函数 updateData();
时,应用程序都会崩溃,以确保这是真正的原因,我什至已经评论过,还尝试将其放入处理程序中以在 3000 毫秒后 运行 它,如预期的那样它在时间段后崩溃了。
通过初始化数据库解决了。
myDb = new DatabaseHelper(this);
为什么不直接将值传递给 updateData()
?
editUpdtName.setText(Name);
editUpdSurname.setText(SurName);
editUpdMarks.setText(Marks);
updateData(Name, SurName, Marks);
您忘记初始化 myDb
。
在你的 onCreate()
方法中初始化它:
myDb = new DatabaseHelper(this);
你初始化btnUpd了吗?我在你的 onCreate()
中看不到这个
btnUpd = (Button) findViewById(...)
自从我开始 android studio 已经一个月了,此时我陷入了必须从 [= 传递一组 <EditText/>
值的地步16=] 到 UpdateActivity
,然后将这些值发送到 Sqlite 数据库以更新 table。
我的成就:
已成功将值从 MainActivity
的 <EditText/>
发送到 UpdateActivity
的 <EditText/>
我是如何做到的 MainActivity
:
public class MainActivity extends AppCompatActivity {
DatabaseHelper myDb;
EditText editName, editSurname, editMarks;
Button btnUpdate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myDb = new DatabaseHelper(this);
editName = (EditText) findViewById(R.id.UpdName);
editSurname = (EditText) findViewById(R.id.editTextSurname);
editMarks = (EditText) findViewById(R.id.UpdMarks);
btnUpdate = (Button)findViewById(R.id.btnUpdate);
btnUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String MainName = editName.getText().toString();
String MainSurname = editSurname.getText().toString();
String MainMarks = editMarks.getText().toString();
Intent UpdateAct = new Intent(MainActivity.this, UpdateActivity.class);
UpdateAct.putExtra("Name", MainName);
UpdateAct.putExtra("SurName",MainSurname );
UpdateAct.putExtra("Marks", MainMarks);
startActivity(UpdateAct);
}
});
}
然后在UpdateActivity
里面:
public class UpdateActivity extends AppCompatActivity {
DatabaseHelper myDb;
Button btnUpd;
EditText editTextId, editUpdtName, editUpdSurname, editUpdMarks;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update);
Intent getData = getIntent();
String Name = getData.getStringExtra("Name");
String SurName = getData.getStringExtra("SurName");
String Marks = getData.getStringExtra("Marks");
editTextId = (EditText)findViewById(R.id.editTextID);
editUpdtName = (EditText)findViewById(R.id.UpdName);
editUpdSurname = (EditText)findViewById(R.id.UpdSurname);
editUpdMarks = (EditText)findViewById(R.id.UpdMarks);
btnUpd = (Button)findViewById(R.Id.btnUpd);
editUpdtName.setText(Name);
editUpdSurname.setText(SurName);
editUpdMarks.setText(Marks);
}
我坚持的是将这些值发送到名为 updateData();
的函数
为此,我尝试将 MainActivity
中的值直接用于 UpdateActivity
但失败了,然后我尝试转换这些 <EditText/>
并在函数内部使用它但再次失败。
在我的 UpdateActivity
里面:
..//
editUpdtName.setText(Name);
editUpdSurname.setText(SurName);
editUpdMarks.setText(Marks);
//updateData(Name, SurName, Marks);
updateData();
}
//function definiton
// public void updateData(final String Name, final String SurName, final String Marks)
public void updateData()
{
btnUpd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// boolean isUpdated = myDb.updateData(editTextId.getText().toString(), Name,SurName, Marks);
boolean isUpdated = myDb.updateData(editTextId.getText().toString(), editUpdtName.getText().toString(),
editUpdSurname.getText().toString(), editUpdMarks.getText().toString());
if(isUpdated == true){
Toast.makeText(UpdateActivity.this, "Data Updated Successfully!", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(UpdateActivity.this, "Data NOT Updated!", Toast.LENGTH_SHORT).show();
}
}
});
}
}
每次调用函数 updateData();
时,应用程序都会崩溃,以确保这是真正的原因,我什至已经评论过,还尝试将其放入处理程序中以在 3000 毫秒后 运行 它,如预期的那样它在时间段后崩溃了。
通过初始化数据库解决了。
myDb = new DatabaseHelper(this);
为什么不直接将值传递给 updateData()
?
editUpdtName.setText(Name);
editUpdSurname.setText(SurName);
editUpdMarks.setText(Marks);
updateData(Name, SurName, Marks);
您忘记初始化 myDb
。
在你的 onCreate()
方法中初始化它:
myDb = new DatabaseHelper(this);
你初始化btnUpd了吗?我在你的 onCreate()
中看不到这个btnUpd = (Button) findViewById(...)