首页 文章

无法实例化ComponentInfo活动,因为com.myappliaction没有取值

提问于
浏览
0

我是新来的,我不知道我在哪里做错了请帮帮我... androidmanifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.dell.myapplication">


    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_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=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".DisplayMessageActivity"
            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>    </application>



</manifest>

mainactivity.kt

    package com.example.dell.myapplication

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.EditText
import kotlinx.android.synthetic.main.activity_main.*
import android.Manifest.permission
import android.Manifest.permission.WRITE_EXTERNAL_STORAGE
import android.support.v4.app.ActivityCompat
import android.content.pm.PackageManager
import android.support.v4.content.ContextCompat
import java.util.jar.Manifest


const val EXTRA_MESSAGE = "com.example.dell.myapplication.MESSAGE"


class MainActivity : AppCompatActivity() {

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

    }

    fun sendMessage(view: View) {


        // Do something in response to button
        val editText = findViewById<EditText>(R.id.editText)
        val message = editText.text.toString()

        val intent = Intent(this, DisplayMessageActivity::class.java).apply {
            putExtra(EXTRA_MESSAGE, message)
        }
        print(EXTRA_MESSAGE)
        startActivity(intent)
        }
}

displaymessage.kt

    package com.example.dell.myapplication

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import android.content.Intent


class DisplayMessageActivity : AppCompatActivity() {

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




    }
    // Get the Intent that started this activity and extract the string
    val message = intent.getStringExtra(EXTRA_MESSAGE)

    // Capture the layout's TextView and set the string as its text
    val textView = findViewById<TextView>(R.id.textView2).apply {
        text = message
    }
}

string.xml

<resources>
<string name="app_name">myapplication</string>
<string name="edit_message">enter a message</string>
<string name="button_send">send</string>

这里是错误日志04-17 12:27:15.657 12925-12925 / com.example.dell.myapplication E / AndroidRuntime:FATAL EXCEPTION:main进程:com.example.dell.myapplication,PID:12925 java.lang.RuntimeException :无法实例化活动ComponentInfo {com.example.dell.myapplication / com.example.dell.myapplication.DisplayMessageActivity}:java.lang.NullPointerException:尝试调用虚方法'java.lang.String android.content.Intent.getStringExtra (java.lang.String)'在android.app.ActivityThread.perleLaunchActivity(ActivityThread.java:2595)上的空对象引用,位于android.app.ActivityThread的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2750) . 在android.app.Loper.loop上的android.app.Handler.dispatchMessage(Handler.java:111)的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1606)访问$ 1100(ActivityThread.java:186)( Looper.java:238)在java.lang.reflect.Method.invoke(Native M)的android.app.ActivityThread.main(ActivityThread.java:6006) ethod)com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:937)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:798)引起:java.lang.NullPointerException :尝试在com.example.dell.myapplication.DisplayMessageActivity上的空对象引用上调用虚方法'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' . (DisplayMessageActivity.kt:20)在Android.app.ActivityThread.handleLaunchActivity的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)的android.app.Instrumentation.newActivity(Instrumentation.java:1072)的java.lang.Class.newInstance(Native Method)中(ActivityThread.java:2750)在Android.app.Handler.dispatchMessage(Handler)上的android.app.ActivityThread.access $ 1100(ActivityThread.java:186)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1606) .java:111)在android.app.Looper.loop(Looper.java:238)的android.app.ActivityThread.main(ActivityThread.java:6006)在java.la位于com.android.internal.os.ZygoteInit的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:937)中的ng.reflect.Method.invoke(Native Method)(ZygoteInit.java:798) )04-17 12:27:15.720 12925-12925 / com.example.dell.myapplication I / Process:发送信号 . PID:12925 SIG:9

2 回答

  • 0

    您需要在 onCreate() 方法中执行 findViewById

    试试这个

    class DisplayMessageActivity : AppCompatActivity() {
    
        val EXTRA_MESSAGE = "com.example.dell.myapplication.MESSAGE"
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_display_message)
    
            // Get the Intent that started this activity and extract the string
            val message = intent.getStringExtra(EXTRA_MESSAGE)
    
            // Capture the layout's TextView and set the string as its text
            val textView = findViewById<TextView>(R.id.textView2).apply {
            text = message
        }
    
    
        }
    
    }
    
  • 0

    您在 DisplayMessageActivity 中调用 intent.getStringExtra(EXTRA_MESSAGE) 时获得NPE . 这是因为你试图在 Activity 实际设置的 intent 之前初始化该字段( val message ) .

    而不是那样,你应该将代码移动到 onCreate 并在那里使用 intent . 另外,正如Nilesh建议的那样,您还需要将findViewById移动到 onCreate ,因为尚未设置内容布局 .

    当系统实例化活动类时,会初始化您的 messagetextView 字段,这是错误的 .

相关问题