簡體   English   中英

應用程序在啟動時崩潰

[英]Application crashes on startup

我正在創建一個 android 應用程序。 但是,一旦我單擊它的圖標,它就會立即崩潰。

這是代碼:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="@color/accent_blue"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/login_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Log In"
        android:textSize="50sp"
        android:padding="40dp"
        android:textColor="@color/black"
        android:background="@color/white"
        android:textAlignment="center"
        app:layout_constraintBottom_toTopOf="@id/username_label"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/username_label"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Username"
        android:textColor="@color/black"
        android:textSize="24sp"
        android:layout_marginTop="50dp"
        android:layout_marginStart="50dp"
        app:layout_constraintBottom_toTopOf="@id/username_text"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/login_header" />

    <TextView
        android:id="@+id/password_label"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Password"
        android:textColor="@color/black"
        android:textSize="24sp"
        android:layout_marginTop="40dp"
        android:layout_marginStart="50dp"
        app:layout_constraintBottom_toTopOf="@id/password_text"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/username_text" />

    <EditText
        android:id="@+id/username_text"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:hint="Enter email address"
        android:inputType="textEmailAddress"
        android:layout_marginStart="70dp"
        android:layout_marginEnd="50dp"
        app:layout_constraintTop_toBottomOf="@id/username_label"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toTopOf="@id/password_label"/>

    <EditText
        android:id="@+id/password_text"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:hint="Enter password"
        android:inputType="textPassword"
        android:layout_marginStart="70dp"
        android:layout_marginEnd="50dp"
        app:layout_constraintTop_toBottomOf="@id/password_label"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toTopOf="@id/btn_sign_in"/>

    <Button
        android:id="@+id/btn_sign_in"
        android:layout_height="wrap_content"
        android:layout_width="200dp"
        android:text="Sign In"
        android:textSize="24sp"
        android:layout_marginBottom="200dp"
        android:layout_marginTop="80dp"
        android:onClick="signInUser"
        android:background="@drawable/btn_rounded"
        app:layout_constraintTop_toBottomOf="@id/password_text"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

package com.genius.nibebe;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class MainActivity extends AppCompatActivity {

    EditText username, password;
    FirebaseAuth auth;
    ProgressDialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        if(user !=null){
            Intent i = new Intent(MainActivity.this,MapActivity.class);
            startActivity(i);
            finish();
        } else {
            setContentView(R.layout.activity_main);
        }

        username = findViewById(R.id.username_text);
        password = findViewById(R.id.password_text);
        auth = FirebaseAuth.getInstance();
        dialog = new ProgressDialog(this);

    }

    public void signInUser(View v){
        dialog.setMessage("Signing in. Please wait");
        dialog.show();

        if (username.getText().toString().equals("") && password.getText().toString().equals("")){
            Toast.makeText(getApplicationContext(),"Fields cannot be empty",Toast.LENGTH_SHORT).show();
        } else {
            auth.signInWithEmailAndPassword(username.getText().toString(),password.getText().toString()).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()){
                        dialog.hide();
                        Toast.makeText(getApplicationContext(),"User successfully signed in!!!",Toast.LENGTH_SHORT).show();
                        Intent i = new Intent(MainActivity.this,MapActivity.class);
                        startActivity(i);
                        finish();
                    } else {
                        dialog.hide();
                        Toast.makeText(getApplicationContext(),"User not found",Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    }

}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:dist="http://schemas.android.com/apk/distribution"
    package="com.genius.nibebe">

    <!--
         The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
         Google Maps Android API v2, but you must specify either coarse or fine
         location permissions for the 'MyLocation' functionality.
    -->
    <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">

        <!--
             The API key for Google Maps-based APIs is defined as a string resource.
             (See the file "res/values/google_maps_api.xml").
             Note that the API key is linked to the encryption key used to sign the APK.
             You need a different API key for each encryption key, including the release key that is used to
             sign the APK for publishing.
             You can define the keys for the debug and release targets in src/debug/ and src/release/.
        -->
        <activity
            android:name=".MapActivity"
            android:label="@string/title_activity_map"></activity>

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key" />
    </application>

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />

    <dist:module dist:instant="true" />

</manifest>

編輯

日志貓

11-19 10:05:28.277 25221-25221/? W/System: ClassLoader referenced unknown path: /data/app/com.genius.nibebe-2/lib/arm
11-19 10:05:28.734 25221-25221/com.genius.nibebe W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.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
11-19 10:05:28.880 25221-25221/com.genius.nibebe I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>
11-19 10:05:28.881 25221-25221/com.genius.nibebe I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>
11-19 10:05:29.196 25221-25221/com.genius.nibebe D/AndroidRuntime: Shutting down VM
11-19 10:05:29.249 25221-25232/com.genius.nibebe I/art: Background sticky concurrent mark sweep GC freed 3836(479KB) AllocSpace objects, 1(20KB) LOS objects, 6% free, 4MB/4MB, paused 405us total 191.356ms
11-19 10:05:29.521 25221-25221/com.genius.nibebe I/Process: Sending signal. PID: 25221 SIG: 9

當我執行時,它會短暫顯示白屏然后崩潰。 請幫忙。 我在下面的代碼中是否犯了任何錯誤。 提前致謝

setContentView 應該盡早初始化。

嘗試這個。

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        username = findViewById(R.id.username_text);
        password = findViewById(R.id.password_text);
        dialog = new ProgressDialog(MainActivity.this);

        //Init Firebase
        auth = FirebaseAuth.getInstance();
        FirebaseUser user = auth.getCurrentUser();
        if(user != null){
            Intent i = new Intent(MainActivity.this,MapActivity.class);
            startActivity(i);
            finish();
        } else {
            //Do something or just ignore
        }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM