2014-05-01 54 views
-2

在我的应用程序我希望用户正确输入一个4位数的引脚,以便能够继续到下一个屏幕作为一种“人造”身份验证过程。 (这仅用于演示) 如何设置正确的“if”语句来验证用户输入是正确的数字?我有以下的java代码: -第一个按钮点击并输入“0000”后,它回到原来的屏幕。 -after第二个按钮点击,然后又把我的权利到第二/下一屏幕如果语句字符串比较没有启动意图

private void pincheck() { 
    if (mGoogleApiClient.isConnected()) { 
     // get prompts.xml view 
     LayoutInflater li = LayoutInflater.from(context); 
     View promptsView = li.inflate(R.layout.prompts, null); 

     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
       context); 

     // set prompts.xml to alertdialog builder 
     alertDialogBuilder.setView(promptsView); 

     final EditText userInput = (EditText) promptsView 
       .findViewById(R.id.editTextDialogUserInput); 

     if (userInput.getText().toString().equals("0000")) { 
      //moves to the "DoorControl xml page" 
      Intent i = new Intent(this, LogIn.class); 
      startActivity(i); 
     } 

     // set dialog message 
     alertDialogBuilder 
      .setCancelable(false) 
      .setPositiveButton("OK", 
       new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog,int id) { 
       // get user input and set it to result 
       // edit text 
       result.setText(userInput.getText()); 
       } 
       }) 
      .setNegativeButton("Cancel", 
       new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog,int id) { 
       dialog.cancel(); 
       } 
       }); 

     // create alert dialog 
     AlertDialog alertDialog = alertDialogBuilder.create(); 

     // show it 
     alertDialog.show(); 

    } 
} 

谢谢你,我一直在这几个小时,不能找出做到这一点的最好办法!它要么崩溃要么不改变“门禁控制”页面的意图。

谢谢你的任何帮助/链接/建议。 :)

mainactivity XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/wood" 
    android:orientation="vertical" 
    android:padding="16dp" 
    tools:context=".MainActivity" > 

    <LinearLayout 
     android:id="@+id/llProfile" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="20dp" 
     android:orientation="horizontal" 
     android:weightSum="3" 
     android:visibility="gone"> 

     <ImageView 
      android:id="@+id/imgProfilePic" 
      android:layout_width="80dp" 
      android:visibility="gone" 
      android:layout_height="wrap_content" 
      android:layout_weight="1"/> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dp" 
      android:orientation="vertical" 
      android:layout_weight="2" > 

      <TextView 
       android:id="@+id/textview1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="AUTOLOCK" 
       android:layout_gravity="center" 
       android:textSize="70sp" 
       android:textStyle="bold" 
       android:typeface="serif" /> 

      <TextView 
       android:id="@+id/txtName" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="5dp" 
       android:layout_gravity="center" 
       android:textSize="40sp" 
       android:textStyle="bold" /> 
     </LinearLayout> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/txtEmail" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:layout_gravity="center" 
     android:textSize="30sp" 
     android:textStyle="bold" /> 

    <com.google.android.gms.common.SignInButton 
     android:id="@+id/btn_sign_in" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="20dp"/> 

    <Button 
     android:id="@+id/btn_revoke_access" 
     android:layout_marginTop="100dp" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Lock Control" 
     android:visibility="gone" 
     android:layout_marginBottom="10dp"/> 

    <Button 
     android:id="@+id/btn_sign_out" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/btn_logout_from_google" 
     android:visibility="gone" /> 

    <Button 
     android:id="@+id/two" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Revoke Access" 
     android:visibility="gone" /> 

    <EditText 
     android:id="@+id/editTextResult" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Sample" 
     android:inputType="number" 
     android:visibility="gone" /> 

</LinearLayout> 

提示XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layout_root" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:padding="10dp" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Type Your Message : " 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <EditText 
     android:id="@+id/editTextDialogUserInput" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="4" 
     android:inputType="number" > 

     <requestFocus /> 

    </EditText> 

</LinearLayout> 

loginscreen.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="@drawable/wood" 
    android:padding="20dp" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".login" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="AUTOLOCK" 
     android:textStyle="bold" 
     android:textSize="50sp" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_marginTop="75dp" 
     android:text="Door is:" 
     android:textSize="30sp" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_marginTop="75dp" 
     android:text="Door is:" 
     android:textSize="30sp" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <Button 
     android:id="@+id/btnOn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="200dp" 
     android:layout_gravity="center" 
     android:text="Lock" /> 

    <Button 
     android:id="@+id/btnOff" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Unlock" /> 

    <TextView 
     android:id="@+id/txtArduino" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:visibility="gone" 
     android:text="Sample Text" /> 

</LinearLayout> 

LogIn.java

package com.example.autolock; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.lang.reflect.Method; 
import java.util.UUID; 

import android.app.Activity; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothSocket; 
import android.content.Intent; 
import android.os.Build; 
import android.os.Bundle; 
import android.os.Handler; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class LogIn extends Activity { 
    private static final String TAG = "bluetooth2"; 

    Button btnOn, btnOff; 
    TextView txtArduino; 
    Handler h; 

    final int RECIEVE_MESSAGE = 1;  // Status for Handler 
    private BluetoothAdapter btAdapter = null; 
    private BluetoothSocket btSocket = null; 
    private StringBuilder sb = new StringBuilder(); 

    private ConnectedThread mConnectedThread; 

    // SPP UUID service 
    private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 

    // MAC-address of Bluetooth module (you must edit this line) 
    private static String address = "00:13:12:06:48:79"; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.loginscreen); 

    btnOn = (Button) findViewById(R.id.btnOn);     // button LED ON 
    btnOff = (Button) findViewById(R.id.btnOff);    // button LED OFF 
    txtArduino = (TextView) findViewById(R.id.txtArduino);  // for display the received data from the Arduino 

    h = new Handler() { 
     public void handleMessage(android.os.Message msg) { 
      switch (msg.what) { 
      case RECIEVE_MESSAGE:             // if receive massage 
       byte[] readBuf = (byte[]) msg.obj; 
       String strIncom = new String(readBuf, 0, msg.arg1);     // create string from bytes array 
       sb.append(strIncom);            // append string 
       int endOfLineIndex = sb.indexOf("\r\n");       // determine the end-of-line 
       if (endOfLineIndex > 0) {           // if end-of-line, 
        String sbprint = sb.substring(0, endOfLineIndex);    // extract string 
        sb.delete(0, sb.length());          // and clear 
        txtArduino.setText("Data from Arduino: " + sbprint);   // update TextView 
        btnOff.setEnabled(true); 
        btnOn.setEnabled(true); 
       } 
       //Log.d(TAG, "...String:"+ sb.toString() + "Byte:" + msg.arg1 + "..."); 
       break; 
      } 
     }; 
    }; 

    btAdapter = BluetoothAdapter.getDefaultAdapter();  // get Bluetooth adapter 
    checkBTState(); 

    btnOn.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
//  btnOn.setEnabled(true); 
     mConnectedThread.write("1"); // Send "1" via Bluetooth 
     Toast.makeText(getBaseContext(), "Door is locked", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    btnOff.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
//  btnOff.setEnabled(true); 
     mConnectedThread.write("0"); // Send "0" via Bluetooth 
     Toast.makeText(getBaseContext(), "Door is unlocked", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    } 

    private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException { 
     if(Build.VERSION.SDK_INT >= 10){ 
      try { 
       final Method m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class }); 
       return (BluetoothSocket) m.invoke(device, MY_UUID); 
      } catch (Exception e) { 
       Log.e(TAG, "Could not create Insecure RFComm Connection",e); 
      } 
     } 
     return device.createRfcommSocketToServiceRecord(MY_UUID); 
    } 

    @Override 
    public void onResume() { 
    super.onResume(); 

    Log.d(TAG, "...onResume - try connect..."); 

    // Set up a pointer to the remote node using it's address. 
    BluetoothDevice device = btAdapter.getRemoteDevice(address); 

    // Two things are needed to make a connection: 
    // A MAC address, which we got above. 
    // A Service ID or UUID. In this case we are using the 
    //  UUID for SPP. 

    try { 
     btSocket = createBluetoothSocket(device); 
    } catch (IOException e) { 
     errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + "."); 
    } 

    // Discovery is resource intensive. Make sure it isn't going on 
    // when you attempt to connect and pass your message. 
    btAdapter.cancelDiscovery(); 

    // Establish the connection. This will block until it connects. 
    Log.d(TAG, "...Connecting..."); 
    try { 
     btSocket.connect(); 
     Log.d(TAG, "....Connection ok..."); 
    } catch (IOException e) { 
     try { 
     btSocket.close(); 
     } catch (IOException e2) { 
     errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + "."); 
     } 
    } 

    // Create a data stream so we can talk to server. 
    Log.d(TAG, "...Create Socket..."); 

    mConnectedThread = new ConnectedThread(btSocket); 
    mConnectedThread.start(); 
    } 

    @Override 
    public void onPause() { 
    super.onPause(); 

    Log.d(TAG, "...In onPause()..."); 

    try  { 
     btSocket.close(); 
    } catch (IOException e2) { 
     errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + "."); 
    } 
    } 

    private void checkBTState() { 
    // Check for Bluetooth support and then check to make sure it is turned on 
    // Emulator doesn't support Bluetooth and will return null 
    if(btAdapter==null) { 
     errorExit("Fatal Error", "Bluetooth not support"); 
    } else { 
     if (btAdapter.isEnabled()) { 
     Log.d(TAG, "...Bluetooth ON..."); 
     } else { 
     //Prompt user to turn on Bluetooth 
     Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
     startActivityForResult(enableBtIntent, 1); 
     } 
    } 
    } 

    private void errorExit(String title, String message){ 
    Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show(); 
    finish(); 
    } 

    private class ConnectedThread extends Thread { 
     private final InputStream mmInStream; 
     private final OutputStream mmOutStream; 

     public ConnectedThread(BluetoothSocket socket) { 
      InputStream tmpIn = null; 
      OutputStream tmpOut = null; 

      // Get the input and output streams, using temp objects because 
      // member streams are final 
      try { 
       tmpIn = socket.getInputStream(); 
       tmpOut = socket.getOutputStream(); 
      } catch (IOException e) { } 

      mmInStream = tmpIn; 
      mmOutStream = tmpOut; 
     } 

     public void run() { 
      byte[] buffer = new byte[256]; // buffer store for the stream 
      int bytes; // bytes returned from read() 

      // Keep listening to the InputStream until an exception occurs 
      while (true) { 
       try { 
        // Read from the InputStream 
        bytes = mmInStream.read(buffer);  // Get number of bytes and message in "buffer" 
        h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();  // Send to message queue Handler 
       } catch (IOException e) { 
        break; 
       } 
      } 
     } 

     /* Call this from the main activity to send data to the remote device */ 
     public void write(String message) { 
      Log.d(TAG, "...Data to send: " + message + "..."); 
      byte[] msgBuffer = message.getBytes(); 
      try { 
       mmOutStream.write(msgBuffer); 
      } catch (IOException e) { 
       Log.d(TAG, "...Error data send: " + e.getMessage() + "...");  
       } 
     } 
    } 
} 
下面

的logcat:

04-30 21:14:30.070: D/dalvikvm(10939): GC_CONCURRENT freed 569K, 10% free 17853K/19655K, 
paused 14ms+16ms, total 101ms 
04-30 21:14:30.242: D/bluetooth2(10939): ...Bluetooth ON... 
04-30 21:14:30.242: D/bluetooth2(10939): ...onResume - try connect... 
04-30 21:14:30.250: V/BluetoothSocket.cpp(10939): initSocketNative 
04-30 21:14:30.250: V/BluetoothSocket.cpp(10939): ...fd 40 created (RFCOMM, lm = 0) 
04-30 21:14:30.250: V/BluetoothSocket.cpp(10939): initSocketFromFdNative 
04-30 21:14:30.414: D/bluetooth2(10939): ...Connecting... 
04-30 21:14:30.429: D/BluetoothUtils(10939): isSocketAllowedBySecurityPolicy start : device null 
04-30 21:14:35.593: V/BluetoothSocket.cpp(10939): abortNative 
04-30 21:14:35.593: V/BluetoothSocket.cpp(10939): ...asocket_abort(40) complete 
04-30 21:14:35.593: V/BluetoothSocket.cpp(10939): destroyNative 
04-30 21:14:35.593: V/BluetoothSocket.cpp(10939): ...asocket_destroy(40) complete 
04-30 21:14:35.593: D/bluetooth2(10939): ...Create Socket... 
04-30 21:14:35.617: I/Choreographer(10939): Skipped 327 frames! The application may be doing too much work on its main thread. 
+2

什么呢'的System.out.println(userInput.getText()。 toString());'show? –

+0

当你的应用程序崩溃logcat中记录了什么错误? – donfuxx

+0

请发布错误日志。 – Kedarnath

回答

1

发现我的错误:我检查,看看是否在activitymain.xml的EditText上被设置为“0000”。不是直接在prompts.xml中的edittext。

我将if语句移到了“OK”按钮的onclick中。

如果有人会这么好心一个纪念这个问题了,所以我的分数是不会伤害我就这么不胜感激:)