简体   繁体   English

使用 Intent 从 Java Activity 启动 Kotlin Activity 时,应用程序崩溃

[英]App crashes whenever a Kotlin activity is launched from a Java Activity while using Intent

This app currently has three activities, a Login activity, Register activity and an activity written in Kotlin called the Bookjamroom activity.这个应用程序目前有三个活动,一个登录活动,一个注册活动和一个用 Kotlin 编写的活动,称为 Bookjamroom 活动。 The Bookjamroom activity is supposed to be displayed On click of the login button, but whenever i do so the app forcefully shuts down. Bookjamroom 活动应该在单击登录按钮时显示,但每当我这样做时,应用程序就会强行关闭。

Log Cat Error:记录猫错误:

 - 2020-10-15 20:17:53.047 12954-12981/com.example.jamsecure
   E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
   2020-10-15 20:17:53.047 12954-12981/com.example.jamsecure
   E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
   2020-10-15 20:17:53.303 12954-12981/com.example.jamsecure
   D/EGL_emulation: eglMakeCurrent: 0xebb840c0: ver 3 1 (tinfo
   0xebb832e0) 2020-10-15 20:18:03.883 12954-12954/com.example.jamsecure
   D/AndroidRuntime: Shutting down VM 2020-10-15 20:18:03.889
   12954-12954/com.example.jamsecure E/AndroidRuntime: FATAL EXCEPTION:
   main
       Process: com.example.jamsecure, PID: 12954
       java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.jamsecure/com.example.jamsecure.Bookjamroom}:
   java.lang.NullPointerException: Attempt to invoke virtual method
   'android.content.pm.ApplicationInfo
   android.content.Context.getApplicationInfo()' on a null object
   reference
           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2679)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
           at android.app.ActivityThread.-wrap11(Unknown Source:0)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
           at android.os.Handler.dispatchMessage(Handler.java:106)
           at android.os.Looper.loop(Looper.java:164)
           at android.app.ActivityThread.main(ActivityThread.java:6494)
           at java.lang.reflect.Method.invoke(Native Method)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
        Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo
   android.content.Context.getApplicationInfo()' on a null object
   reference
           at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:152)
           at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:157)
           at android.content.Context.obtainStyledAttributes(Context.java:655)
           at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:839)
           at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:806)
           at androidx.appcompat.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:630)
           at androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:223)
           at com.example.jamsecure.Bookjamroom.<init>(Bookjamroom.kt:12)
           at java.lang.Class.newInstance(Native Method)
           at android.app.Instrumentation.newActivity(Instrumentation.java:1174)
           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
           at android.app.ActivityThread.-wrap11(Unknown Source:0) 
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
           at android.os.Handler.dispatchMessage(Handler.java:106) 
           at android.os.Looper.loop(Looper.java:164) 
           at android.app.ActivityThread.main(ActivityThread.java:6494) 
           at java.lang.reflect.Method.invoke(Native Method) 
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Kotlin .kt class code Kotlin .kt 类代码

    package com.example.jamsecure

import android.os.Bundle
import android.view.View
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.floatingactionbutton.FloatingActionButton

class Bookjamroom : AppCompatActivity() {
    private val bfa = findViewById<FloatingActionButton>(R.id.bfa)
    private val bnj = findViewById<FloatingActionButton>(R.id.bnj)
    private val bp = findViewById<FloatingActionButton>(R.id.bp)
    private val bhb = findViewById<FloatingActionButton>(R.id.bhb)
    private val rotateOpen: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.rotate_open_anim) }
    private val rotateClose: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.rotate_close_anim) }
    private val fromBottom: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.from_bottom) }
    private val toBottom: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.to_bottom) }
    private var clicked = false
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_book_jam_room)
        bfa?.setOnClickListener {
            onAddButtonClicked()
        }
        bnj?.setOnClickListener {
            Toast.makeText(this, "1button is clicked", Toast.LENGTH_SHORT).show()

        }
        bp?.setOnClickListener {
            Toast.makeText(this, "2button is clicked", Toast.LENGTH_SHORT).show()

        }
        bhb?.setOnClickListener {
            Toast.makeText(this, "3button is clicked", Toast.LENGTH_SHORT).show()

        }

    }

    private fun onAddButtonClicked() {
        setVisibility(clicked)
        setAnimation(clicked)
        clicked = !clicked
    }

    private fun setVisibility(clicked: Boolean) {
        if (!clicked) {
            bnj.visibility = View.VISIBLE
            bp.visibility = View.VISIBLE
            bhb.visibility = View.VISIBLE
        } else {
            bnj.visibility = View.INVISIBLE
            bp.visibility = View.INVISIBLE
            bhb.visibility = View.INVISIBLE
        }
    }

    private fun setAnimation(clicked: Boolean) {
        if (!clicked) {
            bnj.startAnimation(fromBottom)
            bp.startAnimation(fromBottom)
            bhb.startAnimation(fromBottom)
            bfa.startAnimation(rotateOpen)
        } else {
            bnj.startAnimation(toBottom)
            bp.startAnimation(toBottom)
            bhb.startAnimation(toBottom)
            bfa.startAnimation(rotateClose)
        }
    }
}                        

Java Code that calls the Kotlin class调用 Kotlin 类的 Java 代码

import android.widget.TextView;

import org.jetbrains.annotations.NotNull;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = findViewById(R.id.reg);
        Button lbtn = findViewById(R.id.lb);
       lbtn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
             
                Intent i = new Intent(MainActivity.this,Bookjamroom.class);
                startActivity(i);
            }
        });
        SpannableString spannableString = new SpannableString("New user? tap here to register!");
        ClickableSpan span = new ClickableSpan() {
            @Override
            public void onClick(@NotNull View v) {
                Intent intent = new Intent(MainActivity.this, Register.class);
                startActivity(intent);
            }
        };
        spannableString.setSpan(span, 0, 31, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
        textView.setText(spannableString);
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    }
}

XML file of Kotlin Activity's Layout Kotlin Activity 布局的 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="@drawable/back3"
    tools:context=".Bookjamroom">

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/bfa"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:backgroundTint="@color/colorPrimary"
        android:clickable="true"
        android:focusable="true"
        android:tint="@android:color/white"

        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.955"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.976"
        app:srcCompat="@drawable/b_add" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/bnj"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginBottom="8dp"
        android:backgroundTint="@color/colorPrimary"
        android:clickable="true"
        android:focusable="true"
        android:tint="@android:color/white"
        android:visibility="invisible"
        app:layout_constraintBottom_toTopOf="@+id/bfa"
        app:layout_constraintEnd_toEndOf="@+id/bfa"
        app:srcCompat="@drawable/b_new_jam" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/bp"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginBottom="8dp"
        android:backgroundTint="@color/colorPrimary"
        android:clickable="true"
        android:focusable="true"
        android:tint="@android:color/white"
        android:visibility="invisible"
        app:layout_constraintBottom_toTopOf="@+id/bnj"
        app:layout_constraintEnd_toEndOf="@+id/bnj"
        app:srcCompat="@drawable/b_past" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/bhb"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginBottom="7dp"
        android:backgroundTint="@color/colorPrimary"
        android:clickable="true"
        android:focusable="true"
        android:tint="@android:color/white"
        android:visibility="invisible"
        app:layout_constraintBottom_toTopOf="@+id/bp"
        app:layout_constraintEnd_toEndOf="@+id/bp"
        app:srcCompat="@drawable/b_helpbot" />

    <TextView
        android:id="@+id/textView9"
        android:layout_width="157dp"
        android:layout_height="145dp"
        android:layout_marginTop="64dp"
        android:text="@string/welcom"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.46"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

XML of Java Layout Java布局的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="@drawable/back3"
        tools:context=".MainActivity">
    
        <Button
            android:id="@+id/lb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/login"
            android:textSize="24sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.449"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <EditText
            android:id="@+id/editTextTextPersonName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:fontFamily="sans-serif-black"
            android:hint="@string/enter_username"
            android:importantForAutofill="no"
            android:inputType="textPersonName"
            android:textColor="#F6F6F6"
            android:textColorHint="#FFFFFF"
            android:textSize="24sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.496"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.262" />
    
        <EditText
            android:id="@+id/tpw"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:fontFamily="sans-serif-black"
            android:hint="@string/enter_password"
            android:importantForAutofill="no"
            android:inputType="textPassword"
            android:textColor="#F6F6F6"
            android:textColorHint="#FFFDFD"
            android:textSize="24sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.496"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.377" />
    
        <TextView
            android:id="@+id/textView"
            android:layout_width="360dp"
            android:layout_height="105dp"
            android:fontFamily="sans-serif-black"
            android:text="@string/login_sign_up"
            android:textColor="#FFFFFF"
            android:textSize="36sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="1.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.065" />
    
        <TextView
            android:id="@+id/reg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/new_user_tap_here_to_register"
            android:textColor="#FFFFFF"
            android:textColorHint="#FFFEFE"
            android:textSize="24sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.494"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.852" />
    </androidx.constraintlayout.widget.ConstraintLayout>

PS: This is my first post here at stack overflow, please excuse me if I have made any discrepancies, Thank you. PS:这是我在堆栈溢出的第一篇文章,如果我有任何不符之处,请见谅,谢谢。 Also the classes/activities are declared in the Manifest.类/活动也在清单中声明。 And there isn't any issue with the Anim files.并且动画文件没有任何问题。

You should instantiate views in onCreate method.您应该在 onCreate 方法中实例化视图。

private var bfa: FloatingActionButton? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_book_jam_room)
    bfa = findViewById<FloatingActionButton>(R.id.bfa)
}

or use access directly by id:或直接通过 id 使用访问:

import kotlinx.android.synthetic.main.activity_book_jam_room.*

class Bookjamroom : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_book_jam_room)
        bfa?.setOnClickListener {
            onAddButtonClicked()
        }
    }

Try the following change on your kotlin activity.尝试对您的 kotlin 活动进行以下更改。

class Bookjamroom : AppCompatActivity() {
private lateinit var bfa: FloatingActionButton 
private lateinit var bnj: FloatingActionButton 
private lateinit var bp : FloatingActionButton
private lateinit var bhb : FloatingActionButton

then onCreate:然后在创建:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_book_jam_room)

        bfa = findViewById<FloatingActionButton>(R.id.bfa)
        bnj = findViewById<FloatingActionButton>(R.id.bnj)
        bp = findViewById<FloatingActionButton>(R.id.bp)
        bhb = findViewById<FloatingActionButton>(R.id.bhb)

        bfa?.setOnClickListener {
            onAddButtonClicked()
        }
        bnj?.setOnClickListener {
            Toast.makeText(this, "1button is clicked", Toast.LENGTH_SHORT).show()

        }
        bp?.setOnClickListener {
            Toast.makeText(this, "2button is clicked", Toast.LENGTH_SHORT).show()

        }
        bhb?.setOnClickListener {
            Toast.makeText(this, "3button is clicked", Toast.LENGTH_SHORT).show()

        }

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM