我是新来的,我不知道我在哪里做错了请帮帮我... 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 回答
您需要在
onCreate()
方法中执行 findViewById试试这个
您在
DisplayMessageActivity
中调用intent.getStringExtra(EXTRA_MESSAGE)
时获得NPE . 这是因为你试图在Activity
实际设置的intent
之前初始化该字段(val message
) .而不是那样,你应该将代码移动到
onCreate
并在那里使用intent
. 另外,正如Nilesh建议的那样,您还需要将findViewById移动到onCreate
,因为尚未设置内容布局 .当系统实例化活动类时,会初始化您的
message
和textView
字段,这是错误的 .