Передача значения базы данных в переменную - PullRequest
0 голосов
/ 10 января 2019

Я редко спрашиваю здесь, поэтому прежде всего извините, если мой вопрос читабелен или не разрешен здесь. Поэтому я пытаюсь передать имя пользователя из LoginActivity в переменную player1 в HomeActivity. Вот код для класса HomeActivity.java

public class HomeActivity extends Activity {
    TextView NameTxt;
    TextView CoinTxt;
    TextView GemTxt;

    String p1name = player1.getName();
    int p1coin = player1.getCoins();
    int p1gem = player1.getGems();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

   setContentView(R.layout.main_screen);

//////TV declare///////

       NameTxt = (TextView)findViewById(R.id.playerName);
       CoinTxt = (TextView)findViewById(R.id.cointxt);
       GemTxt = (TextView)findViewById(R.id.gemtxt);

       NameTxt.setText(p1name);
       CoinTxt.setText("Coin: " +p1coin);
       GemTxt.setText("Gem: " +p1gem);
   }
}

А это LoginActivity.class

public class LoginActivity extends Activity {

    EditText edit1;
    EditText edit2;
    EditText edit3;

    Button registerBtn;
    Button loginBtn;

    DatabaseHelper myDb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//Set fullscreen and no title//////////
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);

///////////////////////////////////////
        setContentView(R.layout.login_screen);

        edit1 = (EditText)findViewById(R.id.editpname);
        edit2 = (EditText)findViewById(R.id.editpemail);
        edit3 = (EditText)findViewById(R.id.editppw);

        registerBtn = (Button)findViewById(R.id.registerbtn);
        loginBtn = (Button)findViewById(R.id.loginbtn);

        myDb = new DatabaseHelper(this);

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

                if (validate()) {
                    String Email = edit2.getText().toString();
                    String Password = edit3.getText().toString();

                    User currentUser = myDb.Authenticate(new User(null, null, Email, Password));

                        if (currentUser != null) {
                            System.out.println("Successfull");

                            Intent intent = new Intent(getApplicationContext(),HomeActivity.class);
                            startActivity(intent);
                            finish();
                        } else {

                           System.out.println("Unsuccessfull");

                        }
                    }
                }
            });

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

                    if (validate()) {
                        String UserName = edit1.getText().toString();
                        String Email = edit2.getText().toString();
                        String Password = edit3.getText().toString();

                        if (!myDb.isEmailExists(Email)) {
                                myDb.addUser(player1);
                            public User player1 = new User(null, UserName, Email, Password);
                        }
                    } 
                }
            });
        }

        public boolean validate() {
            boolean valid = false;
            String Email = edit2.getText().toString();
            String Password = edit3.getText().toString();

            if (!android.util.Patterns.EMAIL_ADDRESS.matcher(Email).matches()) {
                valid = false;
                 edit2.setError("Please enter valid email!");
            } else {
                valid = true;
                 edit2.setError(null);
            }

            if (Password.isEmpty()) {
                valid = false;
                  edit3.setError("Please enter valid password!");
           } else {
               if (Password.length() > 5) {
               valid = true;
               edit3.setError(null);
           } else {
               valid = false;
                 edit3.setError("Password is to short!");
           }
       } 
       return valid;
   }  

}

И у меня также есть простой класс User.java

String id;
String userName;
String email;
String password;
int coins;
int gems;

public User(String id, String userName, String email, String password) {

    this.id = id;
    this.email = email;
   //And so on. Don't mind this

}

public String getName() {
    return this.userName;
}

public int getCoins() {
    return this.coins;
}

public int getGems() {
    return this.gems;
}

И я пишу короткий код для удобства чтения. Я получаю сообщение об ошибке myDb.addUser (player1); И тот, что под ним.

Я просто пытаюсь сделать так, чтобы имя игрока равнялось значению имени пользователя в базе данных. а также монеты и драгоценные камни тоже. Ребята, можете ли вы помочь мне понять, как передать значение? Мне понадобилось целых 3 дня, чтобы найти способ это исправить. И это просто взорвало мой мозг. Так что, возможно, вы, ребята, можете помочь мне

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Игнорируя содержимое базы данных и предполагая, что LoginActivity запускается из другого действия (MainActivity), вы можете адаптировать следующее, передавая Имя пользователя и UserId (достаточно, чтобы затем получить любые дополнительные данные в HomeActivity из базы данных).

Таким образом, при запуске немедленно активируется LoginActivity .

Нажатие Вход в систему (имитирует получение пользователя и идентификатора из db) запускает HomeActivity , передавая имя пользователя и идентификатор пользователя с помощью Intent Extras.

HomeActivity отображает имя пользователя и идентификатор пользователя, а также кнопку DONE .

Щелчок по кнопке DONE возвращает обратно через стек (skipng LoginActivity, как это было завершено) в MainActivity , который изменяет TextView с Hello Мир до Добро пожаловать обратно (не то, чтобы вы когда-либо видели Hello World).

MainActivity.java: -

public class MainActivity extends AppCompatActivity {

    TextView mMessage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mMessage = this.findViewById(R.id.message);

        // Immediately start Login Activity
        Intent i = new Intent(MainActivity.this,LoginActivity.class);
        startActivity(i);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mMessage.setText("Welcome back");
    }
}

LoginActivity.java: -

public class LoginActivity extends AppCompatActivity {

    public static final String INTENTKEY_USERNAME = "IK_USERNAME";
    public static final String INTENTKEY_USERID = "IK_USERID";

    Button mloginbtn;
    Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        mContext = this;
        mloginbtn = this.findViewById(R.id.loginbtn);
        mloginbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(mContext,HomeActivity.class);
                i.putExtra(INTENTKEY_USERNAME,"Fred");
                i.putExtra(INTENTKEY_USERID,99L);
                startActivity(i);
                finish();
            }
        });
    }
}

HomeActivity.java

public class HomeActivity extends AppCompatActivity {

    TextView mUsername, muserid;
    Button mDone;

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

        mUsername = this.findViewById(R.id.username);
        muserid = this.findViewById(R.id.userid);
        mDone = this.findViewById(R.id.done);
        mDone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });

        Intent i = this.getIntent();
        mUsername.setText(i.getStringExtra(LoginActivity.INTENTKEY_USERNAME));
        muserid.setText(String.valueOf(i.getLongExtra(LoginActivity.INTENTKEY_USERID,0)));
    }
}
0 голосов
/ 11 января 2019

Я бы сделал следующее:

    ...
    Intent intent = new Intent(getApplicationContext(),HomeActivity.class);
        intent.putExtra("username", Bob)
        startActivity(intent);
        finish();
    ...

а потом в доме есть:

    Intent intent = getIntent();
    String easyPuzzle = intent.getExtras().getString("username");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...