基本上,我想开始一个活动,打印出输入字符串和一个图像。
在activity_display_message.xml中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical" >
<TextView
android:text="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/imageView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/serious" />
</LinearLayout>
这是OnCreate()中的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
ImageView image2 = (ImageView) findViewById(R.id.imageView2);
// Create the text view
TextView textView = (TextView)findViewById(R.id.textView);
//textView.setTextSize(20);
textView.setText(message);
// Set the text view as the activity layout
// Show the Up button in the action bar.
setupActionBar();
}
这段代码有什么问题吗?
编辑:不确定如何获得堆栈跟踪,但我刚刚在Catlog中找到了这些行:
07-05 12:26:53.677: E/AppsCustomizePagedView(611): Widget ComponentInfo{com.th.android.widget.gTabsimiClock/com.th.android.widget.gTabsimiClock.GTabsimiClock5x1} can not fit on this device (736, 144)
07-05 12:26:53.692: E/AppsCustomizePagedView(611): Widget ComponentInfo{at.abraxas.powerwidget.free/at.abraxas.powerwidget.free.SettingsAppWidgetProvider_5} can not fit on this device (760, 80)
07-05 12:26:57.958: E/AudioCache(131): Error 1, -1004 occurred
07-05 12:26:58.146: E/AudioCache(131): Error 1, -1004 occurred
07-05 12:26:58.630: E/AudioCache(131): Error 1, -1004 occurred
07-05 12:27:07.833: E/AudioCache(131): Heap size overflow! req size 1052672, max size: 1048576
这是堆栈跟踪吗?
07-05 12:41:10.058: E/TAG(22474): STACKTRACE
07-05 12:41:10.058: E/TAG(22474): java.lang.NullPointerException
07-05 12:41:10.058: E/TAG(22474): at com.example.myfirstapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:38)
07-05 12:41:10.058: E/TAG(22474): at android.app.Activity.performCreate(Activity.java:5104)
07-05 12:41:10.058: E/TAG(22474): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
07-05 12:41:10.058: E/TAG(22474): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
07-05 12:41:10.058: E/TAG(22474): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
07-05 12:41:10.058: E/TAG(22474): at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-05 12:41:10.058: E/TAG(22474): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-05 12:41:10.058: E/TAG(22474): at android.os.Handler.dispatchMessage(Handler.java:99)
07-05 12:41:10.058: E/TAG(22474): at android.os.Looper.loop(Looper.java:137)
07-05 12:41:10.058: E/TAG(22474): at android.app.ActivityThread.main(ActivityThread.java:5041)
07-05 12:41:10.058: E/TAG(22474): at java.lang.reflect.Method.invokeNative(Native Method)
07-05 12:41:10.058: E/TAG(22474): at java.lang.reflect.Method.invoke(Method.java:511)
07-05 12:41:10.058: E/TAG(22474): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-05 12:41:10.058: E/TAG(22474): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-05 12:41:10.058: E/TAG(22474): at dalvik.system.NativeStart.main(Native Method)
在运行时崩溃时的堆栈跟踪:(上面的那个是通过try / catch获得的)
07-05 12:52:24.386: E/AndroidRuntime(25496): FATAL EXCEPTION: main
07-05 12:52:24.386: E/AndroidRuntime(25496): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.DisplayMessageActivity}: java.lang.NullPointerException
07-05 12:52:24.386: E/AndroidRuntime(25496): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
07-05 12:52:24.386: E/AndroidRuntime(25496): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
07-05 12:52:24.386: E/AndroidRuntime(25496): at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-05 12:52:24.386: E/AndroidRuntime(25496): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-05 12:52:24.386: E/AndroidRuntime(25496): at android.os.Handler.dispatchMessage(Handler.java:99)
07-05 12:52:24.386: E/AndroidRuntime(25496): at android.os.Looper.loop(Looper.java:137)
07-05 12:52:24.386: E/AndroidRuntime(25496): at android.app.ActivityThread.main(ActivityThread.java:5041)
07-05 12:52:24.386: E/AndroidRuntime(25496): at java.lang.reflect.Method.invokeNative(Native Method)
07-05 12:52:24.386: E/AndroidRuntime(25496): at java.lang.reflect.Method.invoke(Method.java:511)
07-05 12:52:24.386: E/AndroidRuntime(25496): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-05 12:52:24.386: E/AndroidRuntime(25496): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-05 12:52:24.386: E/AndroidRuntime(25496): at dalvik.system.NativeStart.main(Native Method)
07-05 12:52:24.386: E/AndroidRuntime(25496): Caused by: java.lang.NullPointerException
07-05 12:52:24.386: E/AndroidRuntime(25496): at com.example.myfirstapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:38)
07-05 12:52:24.386: E/AndroidRuntime(25496): at android.app.Activity.performCreate(Activity.java:5104)
07-05 12:52:24.386: E/AndroidRuntime(25496): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
07-05 12:52:24.386: E/AndroidRuntime(25496): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
07-05 12:52:24.386: E/AndroidRuntime(25496): ... 11 more
消息不为空。当我将OnCreate更改为以下时,将打印消息:(当然,不是图像)
// Create the text view
//TextView textView = (TextView)findViewById(R.id.textView);
TextView textView = new TextView(this);
textView.setTextSize(20);
textView.setText(message);
setContentView(textView);
答案:发现错误:android:text =“@ + id / textView”。应该是android:id,而不是android:text ...
但是谢谢大家的帮助。你们为像我这样的初学者提供了更好的编程体验。
答案 0 :(得分:6)
您需要先将内容设置为活动。
您可以findViewById
设置为活动的当前视图层次结构。由于您尚未将内容设置为活动,因此如果您尝试初始化视图,则会获得NullPointerException
。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
ImageView image2 = (ImageView) findViewById(R.id.imageView2);
TextView textView = (TextView)findViewById(R.id.textView);
textView.setTextSize(20);
textView.setText(message);
....
}
编辑:
由于Squonk评论setText(CharSequence text)
检查空
这
实现类似于
3561 private void setText(CharSequence text, BufferType type,
3562 boolean notifyBefore, int oldlen) {
3563 if (text == null) { // checking for null
3564 text = "";
3565 }
.....
因此第38行是textView.setText(message)
,导致NPE。因此textView未初始化,导致NPE。
继续更新和Squonk评论
如果textview
文件已损坏, R.id
可以为null bcoz指定错误(或无效)R.java
OR。在后一种情况下,使用Project - &gt;清洁应该解决问题。
也是这个
android:text="@+id/textView" // this is actually setting text to textview.
你错过了
android:id="@+id/textView" // textview id attribute missing
当你尝试初始化
时TextView textView = (TextView)findViewById(R.id.textView);
// there is no textview with id textView which caused NPE
答案 1 :(得分:1)
应在创建Imageview对象之前调用setContentView。
答案 2 :(得分:0)
put setContentView(R.layout.activity_display_message); onCreate方法顶部的行。
@Override
public void onCreate() {
super.onCreate();
setContentView(R.layout.activity_display_message);
......
rest code
}
答案 3 :(得分:0)
您是否在清单文件中声明了您的活动?请检查一下。