2017-07-07 58 views
0

我的Android應用使用Firebase時出現了一些問題。通過Android上的Firebase檢索到的數據錯誤

事情是我使用Firebase在Android Studio上爲我的應用程序創建了一個登錄功能,但我必須點擊兩次「登錄」按鈕。當您第一次點擊按鈕時,它不會檢索數據。謝謝。

這裏是java代碼。

package com.jax.android.jaxsqrcodeattendancesystemsecond; 

    import android.content.Intent; 
    import android.os.AsyncTask; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.util.Log; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    import com.google.firebase.database.ChildEventListener; 
    import com.google.firebase.database.DataSnapshot; 
    import com.google.firebase.database.DatabaseError; 
    import com.google.firebase.database.DatabaseReference; 
    import com.google.firebase.database.FirebaseDatabase; 
    import com.google.firebase.database.Query; 
    import com.google.gson.Gson; 

    public class LoginActivity extends AppCompatActivity { 
     private EditText username; 
     private EditText password; 
     private Button buttonLogin; 
     private TextView registerHere; 

     boolean validated = false; 
     String TAG = "TAG: "; 
     public User user = new User(); 
     DatabaseReference mDatabaseReference = FirebaseDatabase.getInstance().getReference("user"); 

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

      username = (EditText)findViewById(R.id.etUsername); 
      password = (EditText)findViewById(R.id.etPassword); 
      buttonLogin = (Button)findViewById(R.id.buttonLogin); 
      registerHere = (TextView)findViewById(R.id.tvRegisterHere); 



      //Login Button 
      buttonLogin.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        AsyncLoginTask task = new AsyncLoginTask(); 
        task.execute(); 
        System.out.println("There are " + "User name : " +" " + user.getUserName() + " "+ "user password " + " :" 
          + user.getPassword()); 


       } 
      }); 

      registerHere.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(LoginActivity.this, RegisterActivity.class); 
        startActivity(intent); 
       } 
      }); 
     } 

     private class AsyncLoginTask extends AsyncTask<String, Void, Void>{ 

      @Override 
      protected Void doInBackground(String... params) { 
       Log.i(TAG,"doInBackground"); 
       if(validated){ 
        // open next activity 
        Intent intent = new Intent(LoginActivity.this, MainActivity.class); 
        startActivity(intent); 

       } 
       return null; 
      } 

      @Override 
      protected void onPreExecute() { 
       String mUsername = username.getText().toString(); 
       String mPassword = password.getText().toString(); 
       Log.i(TAG, "onPreExecute"); 
       Query query = mDatabaseReference.orderByChild("userName").equalTo(mUsername); 
       query.addChildEventListener(new ChildEventListener() { 
        @Override 
        public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
         user = dataSnapshot.getValue(User.class); 
        } 

        @Override 
        public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

        } 

        @Override 
        public void onChildRemoved(DataSnapshot dataSnapshot) { 

        } 

        @Override 
        public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 


       if (mUsername != "" && mUsername.equals(user.getUserName())){ 

        if (password.getText().length()!= 0 && mPassword.equals(user.getPassword())){ 
         validated = true; 

        }else{ 
         Toast toast = Toast.makeText(getApplicationContext(), "User name and password don't match", Toast.LENGTH_LONG); 
         toast.show(); 
         validated = false; 
        } 

       }else{ 
        Toast toast = Toast.makeText(getApplicationContext(), "please enter User name!", Toast.LENGTH_LONG); 
        toast.show(); 
        validated = false; 
       } 

      } 

      @Override 
      protected void onPostExecute(Void aVoid) { 
       if (validated){ 

        Toast toast = Toast.makeText(getApplicationContext(), "Login Successful!", Toast.LENGTH_LONG); 
        toast.show(); 
       } 
       else{ 
        Toast toast = Toast.makeText(getApplicationContext(), "Error Occured!", Toast.LENGTH_LONG); 
        toast.show(); 
       } 

       /* if (user.getName() != null && user != null) { 
        Gson gson = new Gson(); 
        String myJson = gson.toJson(user); 
        Intent intent = new Intent(getApplicationContext() ,MainActivity.class); 
        intent.putExtra("USER_INFO", myJson); 
        startActivity(intent); 

       }*/ 

      } 
     } 

    } 

和佈局XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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:orientation="vertical" 
    tools:context="com.jax.android.jaxsqrcodeattendancesystemsecond.LoginActivity"> 


    <EditText 
     android:id="@+id/etUsername" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="Username" 
     /> 

    <EditText 
     android:id="@+id/etPassword" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:hint="Password" 
     android:inputType="textPassword" /> 

    <Button 
     android:id="@+id/buttonLogin" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="Password" 
     android:text="Login" /> 

    <TextView 
     android:id="@+id/tvRegisterHere" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Register Here" 
     android:textAppearance="@style/TextAppearance.AppCompat.Medium" 
     android:layout_gravity="center" 
     /> 
</LinearLayout> 

logcat的

07-07 11:43:11.722 2888-2888/? I/art: Not late-enabling -Xcheck:jni (already on) 
07-07 11:43:11.723 2888-2888/? W/art: Unexpected CPU variant for X86 using defaults: x86 
07-07 11:43:11.745 2888-2896/? E/art: Failed sending reply to debugger: Broken pipe 
07-07 11:43:11.745 2888-2896/? I/art: Debugger is no longer active 
07-07 11:43:11.745 2888-2896/? I/art: Starting a blocking GC Instrumentation 
07-07 11:43:11.840 2888-2888/? W/System: ClassLoader referenced unknown path: /data/app/com.jax.android.jaxsqrcodeattendancesystemsecond-1/lib/x86 
07-07 11:43:11.850 2888-2888/? D/FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization. 
07-07 11:43:11.856 2888-2888/? D/FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization. 
07-07 11:43:11.865 2888-2888/? I/FA: App measurement is starting up, version: 11011 
07-07 11:43:11.865 2888-2888/? I/FA: To enable debug logging run: adb shell setprop log.tag.FA VERBOSE 
07-07 11:43:11.877 2888-2888/? V/FA: Collection enabled 
07-07 11:43:11.878 2888-2888/? V/FA: App package, google app id: com.jax.android.jaxsqrcodeattendancesystemsecond, 1:1070300143559:android:089e2e22ef09d40c 
07-07 11:43:11.878 2888-2888/? I/FA: To enable faster debug mode event logging run: 
             adb shell setprop debug.firebase.analytics.app com.jax.android.jaxsqrcodeattendancesystemsecond 
07-07 11:43:11.878 2888-2888/? D/FA: Debug-level message logging enabled 
07-07 11:43:11.881 2888-2888/? V/FA: Cancelling job. JobID: 803327265 
07-07 11:43:11.883 2888-2888/? V/FA: Registered activity lifecycle callback 
07-07 11:43:11.883 2888-2888/? I/FirebaseInitProvider: FirebaseApp initialization successful 
07-07 11:43:11.900 2888-2918/? V/FA: Using measurement service 
07-07 11:43:11.901 2888-2918/? V/FA: Connecting to remote service 
07-07 11:43:11.903 2888-2888/? W/GooglePlayServicesUtil: Google Play services out of date. Requires 11011000 but found 10298470 
07-07 11:43:11.903 2888-2888/? I/DynamiteModule: Considering local module com.google.android.gms.firebase_database:4 and remote module com.google.android.gms.firebase_database:0 
07-07 11:43:11.903 2888-2888/? I/DynamiteModule: Selected local version of com.google.android.gms.firebase_database 
07-07 11:43:11.903 2888-2918/? W/GooglePlayServicesUtil: Google Play services out of date. Requires 11011000 but found 10298470 
07-07 11:43:11.909 2888-2918/? V/FA: Using measurement service 
07-07 11:43:11.910 2888-2918/? V/FA: Connection attempt already in progress 
07-07 11:43:11.912 2888-2888/? W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
07-07 11:43:11.914 2888-2888/? V/FA: onActivityCreated 
07-07 11:43:11.940 2888-2921/? D/NetworkSecurityConfig: No Network Security Config specified, using platform default 
07-07 11:43:11.970 2888-2918/? V/FA: Using measurement service 
07-07 11:43:11.970 2888-2918/? V/FA: Connection attempt already in progress 
07-07 11:43:11.971 2888-2918/? V/FA: Activity resumed, time: 16635 
07-07 11:43:11.976 2888-2918/? I/FA: Tag Manager is not found and thus will not be used 
07-07 11:43:11.977 2888-2918/? D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_screen_class(_sc)=LoginActivity, firebase_screen_id(_si)=1414208018607190867}] 
07-07 11:43:11.997 2888-2888/? W/FA: Service connection failed: ConnectionResult{statusCode=SERVICE_VERSION_UPDATE_REQUIRED, resolution=null, message=null} 
07-07 11:43:12.014 2888-2918/? V/FA: Using measurement service 
07-07 11:43:12.014 2888-2918/? V/FA: Connecting to remote service 
07-07 11:43:12.019 2888-2918/? W/GooglePlayServicesUtil: Google Play services out of date. Requires 11011000 but found 10298470 
07-07 11:43:12.020 2888-2918/? V/FA: Processing queued up service tasks: 4 
07-07 11:43:12.020 2888-2918/? E/FA: Discarding data. Failed to send app launch 
07-07 11:43:12.020 2888-2918/? E/FA: Failed to get app instance id 
07-07 11:43:12.020 2888-2918/? E/FA: Failed to send current screen to service 
07-07 11:43:12.020 2888-2918/? E/FA: Discarding data. Failed to send event to service 
07-07 11:43:12.068 2888-2932/? I/OpenGLRenderer: Initialized EGL, version 1.4 
07-07 11:43:12.068 2888-2932/? D/OpenGLRenderer: Swap behavior 1 
07-07 11:43:12.068 2888-2932/? W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without... 
07-07 11:43:12.068 2888-2932/? D/OpenGLRenderer: Swap behavior 0 
07-07 11:43:12.406 2888-2888/? W/FA: Service connection failed: ConnectionResult{statusCode=SERVICE_VERSION_UPDATE_REQUIRED, resolution=null, message=null} 
07-07 11:43:12.407 2888-2918/? V/FA: Processing queued up service tasks: 0 
07-07 11:43:33.469 2888-2888/com.jax.android.jaxsqrcodeattendancesystemsecond W/IInputConnectionWrapper: finishComposingText on inactive InputConnection 
07-07 11:43:39.465 2888-2888/com.jax.android.jaxsqrcodeattendancesystemsecond I/TAG:: onPreExecute 
07-07 11:43:39.471 2888-2888/com.jax.android.jaxsqrcodeattendancesystemsecond I/System.out: There are User name : null user password :null 
07-07 11:43:39.471 2888-2941/com.jax.android.jaxsqrcodeattendancesystemsecond I/TAG:: doInBackground 
07-07 11:43:39.675 2888-2919/com.jax.android.jaxsqrcodeattendancesystemsecond W/PersistentConnection: pc_0 - Using an unspecified index. Consider adding '".indexOn": "userName"' at user to your security and Firebase Database rules for better performance 
07-07 11:43:44.664 2888-2888/com.jax.android.jaxsqrcodeattendancesystemsecond I/TAG:: onPreExecute 
07-07 11:43:44.665 2888-2888/com.jax.android.jaxsqrcodeattendancesystemsecond I/System.out: There are User name : test01 user password :123 
07-07 11:43:44.667 2888-2942/com.jax.android.jaxsqrcodeattendancesystemsecond I/TAG:: doInBackground 
07-07 11:43:44.679 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond V/FA: Recording user engagement, ms: 32709 
07-07 11:43:44.680 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond V/FA: Using measurement service 
07-07 11:43:44.680 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond V/FA: Connecting to remote service 
07-07 11:43:44.682 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond W/GooglePlayServicesUtil: Google Play services out of date. Requires 11011000 but found 10298470 
07-07 11:43:44.682 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond V/FA: Activity paused, time: 49340 
07-07 11:43:44.683 2888-2888/com.jax.android.jaxsqrcodeattendancesystemsecond V/FA: onActivityCreated 
07-07 11:43:44.688 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=32709, firebase_screen_class(_sc)=LoginActivity, firebase_screen_id(_si)=1414208018607190867}] 
07-07 11:43:44.705 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond V/FA: Using measurement service 
07-07 11:43:44.705 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond V/FA: Connection attempt already in progress 
07-07 11:43:44.728 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond V/FA: Using measurement service 
07-07 11:43:44.728 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond V/FA: Connection attempt already in progress 
07-07 11:43:44.728 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond V/FA: Activity resumed, time: 49394 
07-07 11:43:44.730 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=LoginActivity, firebase_previous_id(_pi)=1414208018607190867, firebase_screen_class(_sc)=MainActivity, firebase_screen_id(_si)=1414208018607190868}] 
07-07 11:43:44.739 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond V/FA: Using measurement service 
07-07 11:43:44.739 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond V/FA: Connection attempt already in progress 
07-07 11:43:45.059 2888-2888/com.jax.android.jaxsqrcodeattendancesystemsecond W/FA: Service connection failed: ConnectionResult{statusCode=SERVICE_VERSION_UPDATE_REQUIRED, resolution=null, message=null} 
07-07 11:43:45.061 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond V/FA: Processing queued up service tasks: 4 
07-07 11:43:45.061 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond E/FA: Failed to send current screen to service 
07-07 11:43:45.061 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond E/FA: Discarding data. Failed to send event to service 
07-07 11:43:45.061 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond E/FA: Failed to send current screen to service 
07-07 11:43:45.061 2888-3455/com.jax.android.jaxsqrcodeattendancesystemsecond E/FA: Discarding data. Failed to send event to service 
07-07 11:43:45.198 2888-2888/com.jax.android.jaxsqrcodeattendancesystemsecond W/IInputConnectionWrapper: finishComposingText on inactive InputConnection 
07-07 11:43:45.224 2888-2932/com.jax.android.jaxsqrcodeattendancesystemsecond D/OpenGLRenderer: endAllActiveAnimators on 0x9431e800 (RippleDrawable) with handle 0x943526d0 

logcat的錯誤。

Logcat Error

看,當我第一次點擊登錄按鈕,它不具有任何數據。

See, When I first time click the login button, it doesn't have any data

回答

0

我recomand你使用Firebase authentication。您不需要編寫自己的算法,也不需要將來維護它。您也可以使用Google signin

希望它有幫助。

+0

你解決了這個問題嗎? –