这是我的代码:
尝试清洁和重建。
我在youtube上学习了一个教程,他确实做到了。
但是在第4个视频播放后,我对此感到困惑。
试图寻找解决方案。
他们说检查了你的意图,就很好了。
尝试再次将google-service.json
添加到项目中。
MainActivity.java
private FirebaseAuth mAuth;
private EditText loginEmail;
private EditText loginPassword;
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
findViewById(R.id.sign_up).setOnClickListener(this);
findViewById(R.id.login).setOnClickListener(this);
loginEmail=findViewById(R.id.loginEmail);
loginPassword=findViewById(R.id.loginPassword);
progressBar=findViewById(R.id.progress);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.sign_up:
finish();
startActivity(new Intent(this,SignUpActivity.class));
break;
case R.id.login:
loginUser();
break;
}
}
@Override
protected void onStart() {
super.onStart();
if(mAuth.getCurrentUser()!=null){
finish();
startActivity(new Intent(MainActivity.this,ProfileActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
}
}
private void loginUser() {
String email=loginEmail.getText().toString().trim();
String password=loginPassword.getText().toString().trim();
if(email.isEmpty()){
Toast.makeText(this,"Please Enter your Email",Toast.LENGTH_SHORT).show();
loginEmail.setError("Please Enter your Email");
loginEmail.requestFocus();
return;
}
if(!Patterns.EMAIL_ADDRESS.matcher(email).matches()){
Toast.makeText(this,"Please Enter a valid Email address" ,Toast.LENGTH_SHORT).show();
loginEmail.setError("Please Enter a valid Email address");
loginEmail.requestFocus();
return;
}
if(password.isEmpty()){
Toast.makeText(this,"Please Enter a Password",Toast.LENGTH_SHORT).show();
loginEmail.setError("Please Enter a Password");
loginPassword.requestFocus();
return;
}
if(password.length()<6){
Toast.makeText(this,"Minimum length of password should be 6 ",Toast.LENGTH_SHORT).show();
loginEmail.setError("Minimum length of password should be 6");
loginPassword.requestFocus();
return;
}
progressBar.setVisibility(View.VISIBLE);
mAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
progressBar.setVisibility(View.GONE);
if(task.isSuccessful()){
finish();
startActivity(new Intent(MainActivity.this,ProfileActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
}else{
Toast.makeText(getApplicationContext(),task.getException().getMessage(),Toast.LENGTH_SHORT).show();
}
}
});
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true">
<EditText
android:layout_margin="10dp"
android:inputType="textEmailAddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/loginEmail"
android:hint="@string/enter_your_email"/>
<EditText
android:layout_margin="10dp"
android:inputType="textPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/loginPassword"
android:hint="@string/enter_your_password"/>
<Button
android:layout_margin="10dp"
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="136dp"
android:text="@string/login" />
<TextView
android:id="@+id/sign_up"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:text="@string/don_t_have_account_sign_up_here"/>
</LinearLayout>
<ProgressBar
android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:visibility="gone"/>
</RelativeLayout>
清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="c.itp.firebasetest">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".SignUpActivity"
android:parentActivityName=".MainActivity">
<!-- The meta-data tag is required if you support API level 15 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ProfileActivity"></activity>
</application>
</manifest>
Gradle:App模块
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "c.itp.firebasetest"
minSdkVersion 17
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//firebase
implementation 'com.google.firebase:firebase-storage:16.0.1'
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-auth:16.0.1'
//GLIDE
implementation 'com.github.bumptech.glide:glide:4.7.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
}
apply plugin: 'com.google.gms.google-services'
Gradle:project
buildscript {
repositories {
mavenCentral()
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.google.gms:google-services:4.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
这是日志
08/03 11:39:20: Launching app
$ adb install-multiple -r -t /Users/imac/Desktop/RAHEEL/Apps/Employs Projects/Mohsin/ud851-Sunshine-student/FireBaseTest/app/build/intermediates/split-apk/debug/slices/slice_4.apk /Users/imac/Desktop/RAHEEL/Apps/Employs Projects/Mohsin/ud851-Sunshine-student/FireBaseTest/app/build/intermediates/instant-run-apk/debug/app-debug.apk /Users/imac/Desktop/RAHEEL/Apps/Employs Projects/Mohsin/ud851-Sunshine-student/FireBaseTest/app/build/intermediates/split-apk/debug/slices/slice_8.apk /Users/imac/Desktop/RAHEEL/Apps/Employs Projects/Mohsin/ud851-Sunshine-student/FireBaseTest/app/build/intermediates/split-apk/debug/slices/slice_2.apk /Users/imac/Desktop/RAHEEL/Apps/Employs Projects/Mohsin/ud851-Sunshine-student/FireBaseTest/app/build/intermediates/split-apk/debug/slices/slice_3.apk /Users/imac/Desktop/RAHEEL/Apps/Employs Projects/Mohsin/ud851-Sunshine-student/FireBaseTest/app/build/intermediates/split-apk/debug/slices/slice_1.apk /Users/imac/Desktop/RAHEEL/Apps/Employs Projects/Mohsin/ud851-Sunshine-student/FireBaseTest/app/build/intermediates/split-apk/debug/slices/slice_0.apk /Users/imac/Desktop/RAHEEL/Apps/Employs Projects/Mohsin/ud851-Sunshine-student/FireBaseTest/app/build/intermediates/split-apk/debug/slices/slice_5.apk /Users/imac/Desktop/RAHEEL/Apps/Employs Projects/Mohsin/ud851-Sunshine-student/FireBaseTest/app/build/intermediates/split-apk/debug/dep/dependencies.apk /Users/imac/Desktop/RAHEEL/Apps/Employs Projects/Mohsin/ud851-Sunshine-student/FireBaseTest/app/build/intermediates/split-apk/debug/slices/slice_9.apk /Users/imac/Desktop/RAHEEL/Apps/Employs Projects/Mohsin/ud851-Sunshine-student/FireBaseTest/app/build/intermediates/split-apk/debug/slices/slice_6.apk /Users/imac/Desktop/RAHEEL/Apps/Employs Projects/Mohsin/ud851-Sunshine-student/FireBaseTest/app/build/intermediates/split-apk/debug/slices/slice_7.apk
Split APKs installed
$ adb shell am start -n "c.itp.firebasetest/c.itp.firebasetest.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 31133 on device tcl-8050d-SS6L7PKJEUOFNBGQ
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
D/ActivityThread: hoder:android.app.IActivityManager$ContentProviderHolder@128544d,provider,holder.Provider:android.content.ContentProviderProxy@8698b02
D/Proxy: setHttpRequestCheckHandler
D/ActivityThread: installProvider: context.getPackageName()=c.itp.firebasetest
V/FA: Registered activity lifecycle callback
D/FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
I/FirebaseInitProvider: FirebaseApp initialization successful
D/ActivityThread: installProvider: context.getPackageName()=c.itp.firebasetest
I/InstantRun: starting instant run server: is main process
D/ActivityThread: BIND_APPLICATION handled : 0 / AppBindData{appInfo=ApplicationInfo{2bd07c7b c.itp.firebasetest}}
V/ActivityThread: Handling launch of ActivityRecord{2fd4aa98 token=android.os.BinderProxy@331722f1 {c.itp.firebasetest/c.itp.firebasetest.MainActivity}}
D/ActivityThread: hoder:android.app.IActivityManager$ContentProviderHolder@4e57ed6,provider,holder.Provider:android.content.ContentProviderProxy@31e06557
V/ActivityThread: ActivityRecord{2fd4aa98 token=android.os.BinderProxy@331722f1 {c.itp.firebasetest/c.itp.firebasetest.MainActivity}}: app=android.app.Application@3092b262, appName=c.itp.firebasetest, pkg=c.itp.firebasetest, comp={c.itp.firebasetest/c.itp.firebasetest.MainActivity}, dir=/data/app/c.itp.firebasetest-1/base.apk
D/FeatureProxyBase: FeatureProxyBase class constructor
D/FeatureProxyBase: getService(), serviceName = multiwindow_service_v1
D/FeatureProxyBase: FeatureProxyBase class constructor
D/FeatureProxyBase: getService(), serviceName = multiwindow_service_v1
D/FeatureProxyBase: FeatureProxyBase class constructor
getService(), serviceName = multiwindow_service_v1
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
V/FA: onActivityCreated
V/FA: Collection enabled
V/FA: App package, google app id: c.itp.firebasetest, 1:815321298873:android:e1b9c7d86cf14b7b
D/AccessibilityManager: setStateLocked: wasEnabled = false, mIsEnabled = false, wasTouchExplorationEnabled = false, mIsTouchExplorationEnabled = false, wasHighTextContrastEnabled = false, mIsHighTextContrastEnabled = false
java.lang.Throwable: setStateLocked
at android.view.accessibility.AccessibilityManager.setStateLocked(AccessibilityManager.java:553)
at android.view.accessibility.AccessibilityManager.tryConnectToServiceLocked(AccessibilityManager.java:636)
at android.view.accessibility.AccessibilityManager.<init>(AccessibilityManager.java:226)
at android.view.accessibility.AccessibilityManager.getInstance(AccessibilityManager.java:206)
at android.view.View.setFlags(View.java:9843)
at android.view.ViewGroup.initViewGroup(ViewGroup.java:536)
at android.view.ViewGroup.<init>(ViewGroup.java:525)
at android.view.ViewGroup.<init>(ViewGroup.java:520)
at android.view.ViewGroup.<init>(ViewGroup.java:516)
at android.view.ViewGroup.<init>(ViewGroup.java:512)
at android.widget.FrameLayout.<init>(FrameLayout.java:119)
at com.android.internal.policy.impl.PhoneWindow$DecorView.<init>(PhoneWindow.java:2326)
at com.android.internal.policy.impl.PhoneWindow.generateDecor(PhoneWindow.java:3460)
at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:3846)
at com.android.internal.policy.impl.PhoneWindow.getDecorView(PhoneWindow.java:2042)
at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:374)
at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:323)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
at c.itp.firebasetest.MainActivity.onCreate(MainActivity.java:28)
at android.app.Activity.performCreate(Activity.java:6100)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2601)
at android.app.ActivityThread.access$800(ActivityThread.java:178)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5637)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
I/FA: App measurement is starting up, version: 12780
To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
I/FA: To enable faster debug mode event logging run:
adb shell setprop debug.firebase.analytics.app c.itp.firebasetest
D/FA: Debug-level message logging enabled
D/OpenSSLLib: OpensslErr:Module:13(114:155); file:external/openssl/crypto/asn1/asn1_lib.c ;Line:145;Function:ASN1_get_object
V/FA: Connecting to remote service
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: c.itp.firebasetest, PID: 31133
java.lang.NoSuchMethodError: No static method getFont(Landroid/content/Context;ILandroid/util/TypedValue;ILandroid/widget/TextView;)Landroid/graphics/Typeface; in class Landroid/support/v4/content/res/ResourcesCompat; or its super classes (declaration of 'android.support.v4.content.res.ResourcesCompat' appears in /data/app/c.itp.firebasetest-1/split_lib_dependencies_apk.apk)
at android.support.v7.widget.TintTypedArray.getFont(TintTypedArray.java:119)
at android.support.v7.widget.AppCompatTextHelper.updateTypefaceAndStyle(AppCompatTextHelper.java:208)
at android.support.v7.widget.AppCompatTextHelper.loadFromAttributes(AppCompatTextHelper.java:110)
at android.support.v7.widget.AppCompatTextHelperV17.loadFromAttributes(AppCompatTextHelperV17.java:38)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:81)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:71)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:67)
at android.support.v7.widget.Toolbar.setTitle(Toolbar.java:753)
at android.support.v7.widget.ToolbarWidgetWrapper.setTitleInt(ToolbarWidgetWrapper.java:261)
at android.support.v7.widget.ToolbarWidgetWrapper.setWindowTitle(ToolbarWidgetWrapper.java:243)
at android.support.v7.widget.ActionBarOverlayLayout.setWindowTitle(ActionBarOverlayLayout.java:621)
at android.support.v7.app.AppCompatDelegateImplV9.onTitleChanged(AppCompatDelegateImplV9.java:631)
at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:328)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
at c.itp.firebasetest.MainActivity.onCreate(MainActivity.java:28)
at android.app.Activity.performCreate(Activity.java:6100)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2601)
at android.app.ActivityThread.access$800(ActivityThread.java:178)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5637)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
V/FA: Connection attempt already in progress
E/FirebaseInstanceId: Token retrieval failed: SERVICE_NOT_AVAILABLE
Application terminated.