我的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错误。
请参阅,当我第一次单击登录按钮时,它没有任何数据。
答案 0 :(得分:0)
我使用Firebase authentication重新命令你。您不需要编写自己的算法代码,也不需要在将来维护它。您也可以使用Google signin。
希望它有所帮助。