2016-03-18 14 views
0

私はこれを尋ねなければならないと思っていますが、ログインが必要な単純なアプリケーションに取り組んでいます。正しい資格情報が入力された場合は、設定/プリファレンス・アクティビティーにリダイレクトされます。そうでない場合、エラーを表示します。シンプル、そう?ただし、ボタンをクリックするたびに何も起こりません。ボタンで動作しないアクションをクリックしてください - JavaとAndroid Studio

login.java

import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class login extends AppCompatActivity { 
    EditText userName; 
    EditText password; 
    Boolean verified = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     Button loginButton = (Button) findViewById(R.id.loginButton); 
     userName = (EditText) findViewById(R.id.userNameField); 
     password = (EditText) findViewById(R.id.passwordField); 

     loginButton.setOnClickListener(new Button.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if ((userName.getText().toString() != "bkAdmin") || (password.getText().toString() != "midAmBK")) { 
        verified = false; 
       } else { 
        verified = true; 
       } 
      } 
     }); 
     SharedPreferences preferences = getSharedPreferences("config.xml", MODE_PRIVATE); 
     if (verified) { 
      Intent intent = new Intent(this, midamcorp.com.burgerkingapp.preferences.class); 
      SharedPreferences.Editor editor = preferences.edit(); 
      editor.putBoolean("loggedIn", true); 
      editor.commit(); 
      if (preferences.getBoolean("config", false)) { 
       editor.putBoolean("config", true); 
       editor.commit(); 
      } 
      startActivity(intent); 
     } else { 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage("Invalid Username or Password"); 

      builder.setPositiveButton("Accept", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
       } 
      }); 
      FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
      fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
          .setAction("Action", null).show(); 
       } 
      }); 

     } 

    } 
} 

content_login.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="midamcorp.com.burgerkingapp.login" 
    tools:showIn="@layout/activity_login"> 
<TableLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TableRow android:layout_marginBottom="50dp"> 
     <TextView 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:minWidth="200dp" 
      android:text=" Username:" /> 
    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/userNameField" 
     android:minWidth="200dp" 
     /> 

    </TableRow> 
    <TableRow android:layout_marginBottom="50dp"> 
     <TextView 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:minWidth="200dp" 
      android:text=" Password:" /> 
    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="textPassword" 

     android:minWidth="200dp" 
     android:id="@+id/passwordField" 
/> 
</TableRow> 
<TableRow> 
    <Button 
     android:id="@+id/loginButton" 
     android:text = "Login!" /> 

</TableRow> 
</TableLayout> 
</RelativeLayout> 

私は本当に、本当に任意の助けに感謝!

+0

なぜボタンの幅と高さの属性を指定していないのですか? –

+0

'findViewById(R.id.loginButton)'にする必要がありますか? –

答えて

0

。現在は外です。お試しください -

import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class login extends AppCompatActivity { 
    EditText userName; 
    EditText password; 
    Boolean verified = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     Button loginButton = (Button) findViewById(R.id.loginButton); 
     userName = (EditText) findViewById(R.id.userNameField); 
     password = (EditText) findViewById(R.id.passwordField); 
loginButton.setOnClickListener(new Button.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if ((userName.getText().toString() != "bkAdmin") || (password.getText().toString() != "midAmBK")) { 
        verified = false; 
       } else { 
        verified = true; 
       } 

SharedPreferences preferences = getSharedPreferences("config.xml", MODE_PRIVATE); 
     if (verified) { 
      Intent intent = new Intent(login.this, midamcorp.com.burgerkingapp.preferences.class); 
      SharedPreferences.Editor editor = preferences.edit(); 
      editor.putBoolean("loggedIn", true); 
      editor.commit(); 
      if (preferences.getBoolean("config", false)) { 
       editor.putBoolean("config", true); 
       editor.commit(); 
      } 
      startActivity(intent); 
     } else { 
      AlertDialog.Builder builder = new AlertDialog.Builder(login.this); 
      builder.setMessage("Invalid Username or Password"); 

      builder.setPositiveButton("Accept", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
       } 
      }); 
      FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
      fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
          .setAction("Action", null).show(); 
       } 
      }); 

     } 
      } 
     }); 
+0

ありがとうございました。多くの人が同様の解決策を示唆しているようです。しかし、私はクリックハンドラの中にロジックを置くと別の問題に遭遇します。このキーワード(意図とAlertDialog.Builderはもう機能しません)?代わりに私は何を使用しますか? – KellyMarchewa

+0

"this"を "login.this"に置き換えてください。エラーは解決されます。答えを編集しました。 –

+0

ありがとうございました。しかし、それはまだ動作しません。他のアイデア?再度、感謝します。 – KellyMarchewa

0

このようなものを試してみてください。メソッド内でコードをラップし、ボタンのクリックイベント内で呼び出すことができます。あなたが活動を初期化するところ

loginButton.setOnClickListener(new Button.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if ((userName.getText().toString() != "bkAdmin") || (password.getText().toString() != "midAmBK")) { 
        verified = false; 
       } else { 
        verified = true; 
       } 
       completeRegistration(verified); 
      } 
     }); 
} 

ラップは、この方法

private void completeRegistration(boolean verified){ 
     if (verified) { 
      Intent intent = new Intent(this, midamcorp.com.burgerkingapp.preferences.class); 
      SharedPreferences.Editor editor = preferences.edit(); 
      editor.putBoolean("loggedIn", true); 
      editor.commit(); 
      if (preferences.getBoolean("config", false)) { 
       editor.putBoolean("config", true); 
       editor.commit(); 
      } 
      startActivity(intent); 
     } else { 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage("Invalid Username or Password"); 

      builder.setPositiveButton("Accept", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
       } 
      }); 
      FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
      fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
          .setAction("Action", null).show(); 
       } 
      }); 

     } 
} 
0

でのonCreateメソッドがあります。確認された変数は常にfalseになります。ボタンクリックのコールバックは、onCreateが終了した後に実行されます。あなたのロジックを他のメソッドに移動するか、ボタンのコールバックの中に入れます。あなたが設定画面に移動したりOnClickListener内のエラーダイアログを表示するためのコードを記述する必要が

0

利用View.OnClickListener代わりのButton.onClickListener

関連する問題