簡體   English   中英

如何從方法傳遞 EditText 值以在同一活動中為 SQLiteOpenHelper class 插入 function?

[英]How to pass an EditText Value from a method to Insert function for SQLiteOpenHelper class in same Activity?

我有一個微調器,它在 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));
    }
}

我需要從branch.setText(text2);傳遞 Editext 值 to String branch= _txtbranch.getText().toString(); 上面在public void onclick中定義。 但它說不能

解析符號 branch.getText().toString; 因為它在另一個 function 中聲明。

如果我全局聲明它,那么getItemSlelected方法會顯示錯誤並且應用程序崩潰。 請幫忙。

我建議進行以下更改:-

  • 將微調器、適配器和 _txtbranch 聲明為 class 變量
  • 將視圖(微調器和 _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));
    }
}
  • 請注意,以上是原則代碼,尚未運行或測試,因此包含一些錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM