繁体   English   中英

将数据传递给另一个 Java 类 Android Studio

[英]Passing Data to Another Java Class Android Studio

我想将数据从 LoginActivty 类传递给 CUpdateAccountActivity 类,但是当我转到 CUpdateAccountActivity 类时,该值丢失了,但是当我检查 LoginActivity 类时,它具有该值,但无法将其传递给另一个类,可以有人有什么建议吗? 我不知道发生了什么,似乎无法传递数据,我从 CUpdateAccountActivity 类收到的所有内容都是 Null。

public class LoginActivity extends AppCompatActivity {

EditText userlogtxt, passlogtxt;
Button loginlogbtn;

DBHelper myDB;
CBuyFuelActivity cb;
CUpdateAccountActivity cp;
public String username1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    userlogtxt = findViewById(R.id.userlogtxt);
    passlogtxt = findViewById(R.id.passlogtxt);
    loginlogbtn = findViewById(R.id.loginlogbtn);

    myDB = new DBHelper(this);
    cb = new CBuyFuelActivity();
    cp = new CUpdateAccountActivity();

    loginlogbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String username = userlogtxt.getText().toString();
            String password = passlogtxt.getText().toString();
            String type1 = "admin";
            String type2 = "driver";
            String type3 = "client";

            if(username.equals("") || password.equals("")) {
                Toast.makeText(LoginActivity.this, "Enter Credentials", Toast.LENGTH_SHORT).show();
            }
            else {
                Boolean result = myDB.checkAccifAdmin(username,password);
                Boolean result2 = myDB.checkAccifDriver(username,password);
                Boolean result3 = myDB.checkAccifClient(username,password);

                if(result == true) {
                    Intent intent = new Intent(getApplicationContext(), HomeActivity.class);
                    startActivity(intent);
                    Toast.makeText(LoginActivity.this, "Welcome Admin!", Toast.LENGTH_SHORT).show();
                    Toast.makeText(LoginActivity.this, "" + cb.cusername + cb.cpassword, Toast.LENGTH_SHORT).show();
                }
                else if(result2 == true) {
                    Toast.makeText(LoginActivity.this, "Welcome Driver!", Toast.LENGTH_SHORT).show();
                }
                else if(result3 == true) {
                    username1 = userlogtxt.getText().toString();
                    cp.name1 = username1;//I AM STARTING TO PASS THE DATA HERE
                    Intent intent = new Intent(getApplicationContext(), CHomeActivity.class);
                    startActivity(intent);
                    Toast.makeText(LoginActivity.this, "Welcome Client!" +cp.name1, Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(LoginActivity.this, "Invalid Credentials", Toast.LENGTH_SHORT).show();
                }
            }
        }
    });

}

}

public class CUpdateAccountActivity extends AppCompatActivity {

DBHelper myDB;
EditText cfirstnametxt, clastnametxt, cusernametxt, cpasswordtxt, ccontacttxt, cagetxt;
Button csavebtn;
LoginActivity lg;

public String name1; //I AM EXPECTING TO RECEIVE A DATA FROM LoginActiviy CLASS AND STORE IT IN A NAME1 STRING VARIABLE

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cupdate_account);
    lg = new LoginActivity();
    myDB = new DBHelper(this);
    //cp = new CUpdateAccountActivity();

    cfirstnametxt = findViewById(R.id.cfirstnametxt);
    clastnametxt = findViewById(R.id.clastnametxt);
    cusernametxt = findViewById(R.id.cusernametxt);
    cpasswordtxt = findViewById(R.id.cpasswordtxt);
    ccontacttxt = findViewById(R.id.ccontacttxt);
    cagetxt = findViewById(R.id.cagetxt);

    csavebtn = findViewById(R.id.csavebtn);

    viewAccData();

    csavebtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(CUpdateAccountActivity.this, ""+name1, Toast.LENGTH_SHORT).show();
        }
    });

}

您可以通过 Intent extras 将值传递给由 startActivity(the_intent) 启动的活动。

以下是您代码的简化版本。 初始活动是 LoginActivity。 它只有一个按钮,单击该按钮时会使用从 LoginActivity 传递的两个值(一个 String 和一个 Long)启动 CUpdateAccountActivity。 这些值是从 Intent 中提取的,然后 a) 显示在 TextView 中,b) 写入日志和 c) 烘烤。

首次登录活动:-

public class LoginActivity extends AppCompatActivity {

    private Button loginBtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        loginBtn = this.findViewById(R.id.loginBtn);
        loginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(LoginActivity.this,CUpdateAccountActivity.class);
                /* use the intent extra keys as per the CUpdateAccountActivity class */
                /* passed values hard coded for brevity of demo */
                intent.putExtra(CUpdateAccountActivity.IE_USERNAMEKEY,"A String value to be passed");
                intent.putExtra(CUpdateAccountActivity.IE_USERID,100L);
                startActivity(intent);
            }
        });
    }
}

第二个CUpdateAccountActivity :-

public class CUpdateAccountActivity extends AppCompatActivity {

    /* IntentExtra Keys - public so can be accessed by other classes */
    public static final String IE_USERNAMEKEY = "ie_usernameKey";
    public static final String IE_USERID = "ie_userid";

    String passedUserName = "";
    long passedUserId;
    TextView passedValues;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cupdate_account);
        passedValues = this.findViewById(R.id.passedValues);
        /* Get the passed values */
        passedUserName = this.getIntent().getStringExtra(IE_USERNAMEKEY);
        passedUserId = this.getIntent().getLongExtra(IE_USERID,-1);

        /* Use the passed values
            a) in the TextView
            b) written to the log
            c) via Toast
        * */
        passedValues.setText("Login Activity passed > "
                + passedUserName + "< via extra " + IE_USERNAMEKEY
                + "< and >"
                + passedUserId + "< via extra " + IE_USERID
        );

        Log.d("PASSEDVALUE","Login Activity passed >" + passedUserName +"< via extra >" + IE_USERNAMEKEY);
        Log.d("PASSEDVALUE","Login Activity passed >  " + passedUserId + "< via extra >" + IE_USERID);

        Toast.makeText(
                this,
                "Loging Activity passed >" + passedUserName + "< via extra " + IE_USERNAMEKEY
                        + " and >" + passedUserId + "< via extra " + IE_USERID,
                Toast.LENGTH_SHORT
        ).show();
    }
}

启动演示应用程序时显示:-

在此处输入图片说明

单击登录按钮会导致:-

在此处输入图片说明

吐司也会显示,日志包括:-

2021-10-22 15:55:55.509 D/PASSEDVALUE: Login Activity passed >A String value to be passed< via extra >ie_usernameKey
2021-10-22 15:55:55.509 D/PASSEDVALUE: Login Activity passed >  100< via extra >ie_userid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM