java - 如何将 EditText 值从方法传递到同一 Activity 中 SQLiteOpenHelper 类的 Insert 函数?
问题描述
我有一个微调器,它在 onItemSelected 方法中选择分支值并存储在 EditText 中。但是我需要将编辑文本(分支)中显示的值预先分配给同一活动中的 SqliteDatabase 插入操作方法。抱歉,我无法恰当地提出问题。
注册.java
public class register extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
SQLiteOpenHelper openHelper;
SQLiteDatabase db;
Button _btnsignup;
EditText _txtFname, _txtLname, _txtpass, _txtemail, _txtrollno;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
openHelper=new DatabaseHelper(this);
_btnsignup= findViewById(R.id.btn_signup);
_txtFname=findViewById(R.id.fname);
_txtLname=findViewById(R.id.lname);
_txtpass=findViewById(R.id.password);
_txtemail=findViewById(R.id.email);
_txtrollno=findViewById(R.id.rollno);
_btnsignup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db=openHelper.getWritableDatabase();
String fname=_txtFname.getText().toString();
String Lname= _txtLname.getText().toString();
String pwd= _txtpass.getText().toString();
String email= _txtemail.getText().toString();
String rollno= _txtrollno.getText().toString();
insertdata(Fname, Lname, pwd,email,rollno);
Toast.makeText(getApplicationContext(), "Registered Succesfully", Toast.LENGTH_LONG).show();
}
});
Spinner spinner=findViewById(R.id.semester);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.semester,android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
}
public void insertdata( String Fname, String Lname, String pwd, String email, String rollno){
ContentValues contentValues=new ContentValues();
contentValues.put(DatabaseHelper.COL_2, Fname);
contentValues.put(DatabaseHelper.COL_3, Lname);
contentValues.put(DatabaseHelper.COL_4, pwd);
contentValues.put(DatabaseHelper.COL_5, email);
contentValues.put(DatabaseHelper.COL_6, rollno);
long id=db.insert(DatabaseHelper.TABLE_NAME,null,contentValues);
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String text=adapterView.getItemAtPosition(i).toString();
EditText branch= (EditText)findViewById(R.id.branch);
String text2=adapterView.getSelectedItem().toString();
branch.setText(text2);
Toast.makeText(adapterView.getContext(),text,Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
public void open_login(View view){
startActivity(new Intent(getApplicationContext(),login.class));
}
}
我需要将 Editext 值从branch.setText(text2);
上面String branch= _txtbranch.getText().toString();
定义的public void onclick
. 但它说不能
解析符号 branch.getText().toString; 因为它在另一个函数中声明。
如果我在全局范围内声明它,则该getItemSlelected
方法会显示错误并且应用程序崩溃。请帮忙。
解决方案
我建议进行以下更改:-
- 将微调器、适配器和 _txtbranch 声明为类变量
- 将视图(微调器和 _txtbranch)与其他视图一起设置
- 可选地,没有对 onItemSelected 或 onNothingSelected 的覆盖,而是在按钮的 onclick 中检索所选项目(因此不需要分支 EditText)。
以下代码包括上述内容,但请参阅注释:-
public class register extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
SQLiteOpenHelper openHelper;
SQLiteDatabase db;
Button _btnsignup;
Spinner spinner; //<<<<<<<<<< DECLARED HERE
ArrayAdapter<CharSequence> adapter; //<<<<<<<<<< DECLARED HERE
EditText _txtFname, _txtLname, _txtpass, _txtemail, _txtrollno, _txtbranch /* <<<<<<<<<< CHANGED to add _txtbranch>>>>>>>> */;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
openHelper=new DatabaseHelper(this);
_btnsignup= findViewById(R.id.btn_signup);
_txtFname=findViewById(R.id.fname);
_txtLname=findViewById(R.id.lname);
_txtpass=findViewById(R.id.password);
_txtemail=findViewById(R.id.email);
_txtrollno=findViewById(R.id.rollno);
_txtbranch=findViewById(R.id.branch); /* <<<<<<<<<< ADDED >>>>>>>>>> Alternately not needed if getting item directly from spinner*/
spinner=findViewById(R.id.semester); /*<<<<<<<<<<< MOVED TO HERE spinner defined as a class variable */
_btnsignup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db=openHelper.getWritableDatabase();
String fname=_txtFname.getText().toString();
String Lname= _txtLname.getText().toString();
String pwd= _txtpass.getText().toString();
String email= _txtemail.getText().toString();
String rollno= _txtrollno.getText().toString();
String branch = _txtbranch.getText().toString(); // code wanted BUT not needed if value obtained directly from the spinner
//String branch = spinner.getSelectedItem().toString(); // ALTERNATIVE no need _txtbranch duplicating selected value
insertdata(Fname, Lname, pwd,email,rollno);
Toast.makeText(getApplicationContext(), "Registered Succesfully", Toast.LENGTH_LONG).show();
//Toast.makeText(view.getContext(),"Registered Succesfully", Toast.LENGTH_LONG).show(); // Alternative to previous line gets the context from the view
}
});
adapter = ArrayAdapter.createFromResource(this, R.array.semester,android.R.layout.simple_spinner_item); //<<<<<<<<<< CHANGED
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this); //<<<<<<<<<< not really needed as selected item can be retrieved directly from spinner
}
public void insertdata( String Fname, String Lname, String pwd, String email, String rollno) {
ContentValues contentValues = new ContentValues();
contentValues.put(DatabaseHelper.COL_2, Fname);
contentValues.put(DatabaseHelper.COL_3, Lname);
contentValues.put(DatabaseHelper.COL_4, pwd);
contentValues.put(DatabaseHelper.COL_5, email);
contentValues.put(DatabaseHelper.COL_6, rollno);
long id = db.insert(DatabaseHelper.TABLE_NAME, null, contentValues);
}
// Not needed if retrieving value directly from spinner
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String text=adapterView.getItemAtPosition(i).toString();
//branch= (EditText)findViewById(R.id.branch);
String text2=adapterView.getSelectedItem().toString();
_txtbranch.setText(text2);
Toast.makeText(adapterView.getContext(),text,Toast.LENGTH_SHORT).show();
}
// Not needed if retrieving value directly from spinner
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
public void open_login(View view){
startActivity(new Intent(getApplicationContext(),login.class));
}
}
- 请注意,以上是原则代码,尚未运行或测试,因此包含一些错误。
推荐阅读
- android - 如何在文档范围内使用 setInterval
- python - 如何将 CP-SAT 公式(在 python 中)中的目标指定为所有决策变量值的最大值的最小化?
- css - Blazor css 如何显示无法重新连接到服务器。重新加载页面以恢复功能标题
- json - 无法将多个 Jsonb 行合并为一行
- c - 理解以下程序的问题
- python - 使用连接通过连接表获取值
- google-calendar-api - 在不添加 Google Meet 视频会议的情况下在 Google 日历中创建活动
- javascript - JavaScript / TypeScript 上是否有“节点”类型?ts(2345)
- javascript - 我添加了图像但没有出现
- javascript - Javascript 中的生成器是生成迭代器还是可迭代对象?