【问题标题】:Android: Passing values to another activity's function and then to Sqlite database [duplicate]Android:将值传递给另一个活动的函数,然后传递给Sqlite数据库[重复]
【发布时间】:2016-12-23 21:44:23
【问题描述】:

自从我开始使用 android studio 已经一个月了,此时我被困在一个点上,我必须将一组 <EditText/> 值从 MainActivity 传递到 UpdateActivity 然后发送将这些值发送到 Sqlite 数据库以更新表。

我的成就:

成功将值从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 毫秒后运行它,因为预计它会在该时间段后崩溃。

通过初始化db解决了。

myDb = new DatabaseHelper(this);

【问题讨论】:

标签: java android android-activity android-sqlite


【解决方案1】:

您忘记初始化myDb。 在你的 onCreate() 方法中初始化它:

myDb = new DatabaseHelper(this);

【讨论】:

  • 好的。那么myDb 呢?你初始化了吗?
  • 我不敢相信我错过了!我确实喜欢很多其他的东西来修复它,但忽略了初始化myDb -.-
  • 发生了!编码愉快!
  • 根据我的经验,这些是针对问题中的 missing logcat 的。 我的应用程序崩溃,没有给出任何解决方案,因此请始终发布错误 logcat,因为它有助于找出确切的错误是什么。
  • 我打算添加 logcat 但已经通过 intializig 解决了它,所以我没有!任何方式都感谢您的帮助:)
【解决方案2】:

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

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

【讨论】:

  • 我也试过了。它崩溃了!
  • 那么请将堆栈跟踪附加到您的问题中。
  • 你初始化 btnUpd 了吗?我在你的 onCreate() 中看不到这个
  • @Chris623 是的,我有!
  • 好的,但是你收到了什么错误?
【解决方案3】:

你初始化 btnUpd 了吗?我在你的 onCreate() 中看不到这个

btnUpd = (Button) findViewById(...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多