2016-04-06 8 views
0

私はアンドロイドアプリを作って、ユーザーがアカウントを作成し、そのアカウント名とパスワードを使ってページにログインすることができるようにしています。私は自分のプログラムがログインの時点まで正しく機能していると信じています。このメソッドは実際には実行されますが、if-elseが正しく実行されていません。どんな助けもありがとう、ありがとう。Androidログインボタンが動作しない

ログイン方法:

ArrayList<User> users = new ArrayList<>(); // already contains info 

public void login(View view){ 
    // EditText where user enters the username 
    EditText userText = (EditText) view.findViewById(R.id.username); 
    // EditText where user enters the password 
    EditText passText = (EditText) view.findViewById(R.id.password); 

    for (int i = 0;i<users.size();i++) { 
     String p = passText.getText().toString(); //password string 
     String n = userText.getText().toString(); //username string 

     // checks if names of the are equal 
     boolean name = (n.equals(users.get(i).getName())); 
     // checks if passwords of the are equal 
     boolean pass = (p.equals(users.get(i).getPassword())); 
     if (name && pass) { 
      Toast toast = Toast.makeText(getApplicationContext(), "Login Successful!", Toast.LENGTH_LONG); 
      toast.show(); 
      intent = new Intent(MainActivity.this, EnteredPage.class); 
      startActivity(intent); 
      break; 
     } 
     if (i == users.size() - 1) { //if this is the last User object   

       Toast toast = Toast.makeText(getApplicationContext(), "User does not exist!", Toast.LENGTH_LONG); 
       toast.show(); 
     } 
    } 
} 
+0

上記のコードを使用して結果を出してもらえますか? –

答えて

0

問題は、最初の行です。 ArrayList<User> users = new ArrayList<>(); これを言うと、arraylistはリセットされ、値を含んでいません。すべてのユーザー名とパスワードが削除されます。ユーザー名とパスワードはsqliteデータベースに格納できます。そして、ログイン中に、ユーザーがデータベースに存在するかどうかを確認します。 arraylistを取得してその値と比較する必要はありません。

勧告:ユーザ認証が

+0

アンドロイドでサーバーを使用するにはどうすればよいですか?あなたは特に有用なリンクを持っていますか? –

+0

xamppを使用してローカルホストを作成します。そして、それはあなたのアプリからアクセスできるlocalserverにあなたのPCを作るだろう。これはテストと学習のためのものです。 – suku

0
ArrayList<User> users; // already contains info 
private String userName; 
private String pass; 
private EditText userText; 
private EditText passText; 
private String inputUser; 
private String inputPass; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
users = new ArrayList<>(); 
    for(User user: users){ 
     userName = user.getName(); 
     pass = user.getPassword()' 
    } 
    // EditText where user enters the username 
userText = (EditText) findViewById(R.id.username); 
// EditText where user enters the password 
passText = (EditText) findViewById(R.id.password); 
} 
public void login(View view){ 
    inputPass = passText.getText().toString(); //password string 
    inputUser = userText.getText().toString(); //username string 


    if (inputPass.equals(pass) && (inputUser.equals(userName))) { 
     Toast toast = Toast.makeText(getApplicationContext(), "Login Successful!", Toast.LENGTH_LONG); 
     toast.show(); 
     intent = new Intent(MainActivity.this, EnteredPage.class); 
     startActivity(intent); 
     break; 
    } 
    if (i == users.size() - 1) { //if this is the last User object   

      Toast toast = Toast.makeText(getApplicationContext(), "User does not exist!", Toast.LENGTH_LONG); 
      toast.show(); 
    } 
} 
} 

アプリ上でローカルサーバーを経由せずに行われるべきで、それを試してみてください!

+0

コードスニペットを入力するのではなく、あなたからの修正情報を提供してください。 –

+0

OK !!!!!!!!!!!!!! –

0

コードのデバッグやログの使用によって変数のデータをチェックすることをお勧めします。そうすれば、探しているデータが実際に存在するかどうかにかかわらず、正確な原因を正確に突き止めることができます。

また、.equalsをusernameの場合は.equalsIgnoreCaseに変更する必要があります。その場合、大文字と小文字を区別するデータは無視されます。

関連する問題