【问题标题】:Android - I want to call getText() form another activity or classAndroid - 我想从另一个活动或类中调用 getText()
【发布时间】:2017-08-24 13:32:05
【问题描述】:

要完成注册应该是三个步骤,在不同的类和方法中从另一个活动中读取所有字符串。 启动项目时出现一些错误!

class1 (RegisterActivity.java)

public class RegisterActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_register);

            Next = (Button)findViewById(R.id.next);
            Fname = (EditText)findViewById(R.id.fname);
            Lname = (EditText)findViewById(R.id.lname);

            Next.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    fname = Fname.getText().toString().trim();
                    lname = Lname.getText().toString().trim();

                    Intent intent = new Intent(RegisterActivity.this,RegisterStepTwoActivity.class);
                    startActivity(intent);
                    finish();

                }
            });

        }
    }

class2 (RegisterStepTwoActivity)

public class RegisterStepTwoActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register_step_two);

        overridePendingTransition(R.anim.animation,R.anim.animation2);

        Day = (Spinner)findViewById(R.id.spinner_dates);
        Month = (Spinner)findViewById(R.id.spinner_months);
        Year = (Spinner)findViewById(R.id.spinner_years);
        Male = (RadioButton) findViewById(R.id.male);
        Female = (RadioButton) findViewById(R.id.female);
        RG = (RadioGroup)findViewById(R.id.rg);
        Next = (Button)findViewById(R.id.next_s_two);

        Next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                day = Day.getSelectedItem().toString().trim();
                month = Month.getSelectedItem().toString().trim();
                year = Year.getSelectedItem().toString().trim();

                int id = RG.getCheckedRadioButtonId();
                Male = (RadioButton)findViewById(id);
                Female = (RadioButton)findViewById(id);

                gender = ((RadioButton) findViewById(id)).getText().toString().trim();

                Male.getText();
                Female.getText();

                Intent intent = new Intent(RegisterStepTwoActivity.this,RegisterStepThreeActivity.class);
                startActivity(intent);
                finish();

            }
        });

    }
}

这里,我想调用所有的class3 (RegisterStepThreeActivity)

public class RegisterStepThreeActivity extends AppCompatActivity {

    EditText E_mail , Password;
    Button Complete;
    String email , password;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register_step_three);

        overridePendingTransition(R.anim.animation,R.anim.animation2);
        Complete = (Button) findViewById(R.id.complete);
        E_mail = (EditText) findViewById(R.id.email);
        Password = (EditText) findViewById(R.id.password);

        Complete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                email = E_mail.getText().toString().trim();
                password = Password.getText().toString().trim();

                RegisterActivity reg = new RegisterActivity();
                RegisterStepTwoActivity regtwo = new RegisterStepTwoActivity();

                if (!regtwo.day.isEmpty() && !regtwo.month.isEmpty() && !regtwo.year.isEmpty() && !regtwo.gender.isEmpty() &&
                    !reg.fname.equals(reg.Fname) && !reg.lname.isEmpty() && !email.isEmpty() && !password.isEmpty()) {

                    registerUser(reg.fname, reg.lname, regtwo.day, regtwo.month, regtwo.year, regtwo.gender, email, password);

                }

                else {
                    Snackbar.make(v, "Please enter your datalist", Snackbar.LENGTH_LONG).setAction("Action", null).show();
                }
            }
        });
    }

方法 registerUser 不能应用所有字符串! 错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.isEmpty()' on a null object reference

【问题讨论】:

  • 根据 JAVA 变量命名约定,变量名应以小写字母开头。
  • @young 正是当我想要注册时,来自另一个类的某些字符串不能应用于方法 registerUser(string.......) 并且 EditText 始终为 null 或为空!
  • 您正试图从另一个活动中获取文本。
  • @young 是的,我想要这个先生

标签: java android


【解决方案1】:

在您的意图声明下尝试放置此代码

intent.putExtra("data", whatever you are trying to parse);

你想在下一个活动写入时检索该数据的时间

Intent intent = getIntent();
String whatever=intent.getStringExtra("data");

现在你可以用任何你喜欢的方式使用字符串了。

【讨论】:

    【解决方案2】:
     // Error code 
     RegisterActivity reg = new RegisterActivity();
     RegisterStepTwoActivity regtwo = new RegisterStepTwoActivity();
     if (!regtwo.day.isEmpty() ...) {
        registerUser(reg.fname, reg.lname, ...);
     }
    

    如果你想将数据从一个活动发送到另一个活动,那么你可以将数据放在一个包中,然后使用 putExtra() 方法传递它。更多详情请查看answer

    建议

    使用片段而不是使用三个不同的活动来完成注册任务。过渡很容易。

    【讨论】:

    • 如果要读取字符串形式的资源getString(@StringRes int resId)context.getString(@StringRes int resId)
    【解决方案3】:

    您可以在代码中使用Bundle

    注册活动

        // Register one
        fname = Fname.getText().toString().trim();
        lname = Lname.getText().toString().trim();
    
        Intent intent = new Intent(RegisterActivity.this, RegisterStepTwoActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("fname", fname);
        bundle.putString("lname", lname);
        startActivity(intent, bundle);
        finish();
    

    RegisterStepTwoActivity

        // get intent for Register one
        Intent intent = getIntent();
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            String fname = bundle.getString("fname");
            String lname = bundle.getString("lname");
    
            day = Day.getSelectedItem().toString().trim();
            month = Month.getSelectedItem().toString().trim();
            year = Year.getSelectedItem().toString().trim();
    
            int id = RG.getCheckedRadioButtonId();
            Male = (RadioButton) findViewById(id);
            Female = (RadioButton) findViewById(id);
    
            gender = ((RadioButton) findViewById(id)).getText().toString().trim();
    
            bundle.putString("fname", fname);
            bundle.putString("lname", lname);
            bundle.putString("day", day);
            bundle.putString("month", month);
            bundle.putString("year", year);
            bundle.putString("gender", gender);
            Intent intent2 = new Intent(RegisterStepTwoActivity.this, RegisterStepThreeActivity.class);
            startActivity(intent2, bundle);
            finish();
        }
    

    注册StepThreeActivity

        email = E_mail.getText().toString().trim();
        password = Password.getText().toString().trim();
    
        Intent intent = getIntent();
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
    
            String fname = bundle.getString("fname");
            String lname = bundle.getString("lname");
            String day = bundle.getString("day");
            String month = bundle.getString("month");
            String year = bundle.getString("year");
            String gender = bundle.getString("gender");
    
            if (!fname.isEmpty() && !lname.isEmpty() && !day.isEmpty() && !month.isEmpty() &&
                  !year.isEmpty() && !gender.isEmpty()&&!email.isEmpty() && !password.isEmpty()) {
    
                registerUser(fname, lname, day, month, year, gender, email, password);
    
            }
        }
    

    【讨论】:

    • 我认为是正确的方式,但是 startActivity 在 class2 中不起作用!
    • 先生以及如何设置为 public void registerUser(String....) {} 然后在 registerUser 中传递 params.put("ex", ex); (HashMap)
    • 你可以使用 public void registerUser(String fname...){ HashMap map = new new HashMap(); map.putString("fname",fname); --- }
    • public void registerUser(String....){ HashMap map = new HashMap();地图,放(“fname”,fname); }
    【解决方案4】:

    将共享首选项中的值保存为:`

    editor.putString(KEY_USERNAME,fNAme).commit;
    

    并在您需要的任何地方检索它:

    String username= mPreferenences.getString(KEY_USERNAME,"defValue");
    

    对其他值也重复相同的过程。

    希望你得到你的答案

    【讨论】:

      猜你喜欢
      • 2011-10-18
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      相关资源
      最近更新 更多