Android:将值传递给另一个活动的函数,然后传递给Sqlite数据库

时间:2016-08-17 09:44:39

标签: java android android-activity android-sqlite

自从我开始使用android studio已经过了一个月,此时我已经陷入了必须将<EditText/>MainActivityUpdateActivity传递给{{{ 1}}然后将这些值发送到Sqlite数据库以更新表。

我所取得的成就:

成功将值从MainActivity的{​​{1}}发送到<EditText/>的{​​{1}}

我是如何从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时应用程序都会崩溃,以确保这是我甚至评论过的真正原因,并且还尝试将其放入处理程序中以在3000毫秒后运行它,因为它在时间段之后崩溃了

通过初始化db来解决它。

..// 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(); } } }); } }

3 个答案:

答案 0 :(得分:1)

您忘记初始化myDb。 使用onCreate()方法初始化它:

myDb = new DatabaseHelper(this);

答案 1 :(得分:0)

为什么不将值传递给updateData()

editUpdtName.setText(Name);
editUpdSurname.setText(SurName);
editUpdMarks.setText(Marks);
updateData(Name, SurName, Marks);

答案 2 :(得分:0)

你初步化了btnUpd吗?我在你的onCreate()

中看不到这个
btnUpd = (Button) findViewById(...)