android - 第一个 Android 应用程序中的空指针异常

标签 android nullpointerexception

我正在尝试编写我的第一个 Android 应用程序,但遇到了麻烦。我编写了一个简单的 Java 程序来查找用户提供的数字的因数,我想将其移植到 Java。我有一个接口(interface)的 XML 文件,在我添加第一个 Java 类之前它似乎运行正常。现在跑不了了,log.cat说有空指针异常。到目前为止,我只有 stub ,但看起来它应该可以正常运行我到目前为止所做的一切。我包括了 log.cat 文本,但我对它太陌生了,无法理解它。

问题可能不止一个。添加 Java 文件后,我立即开始遇到运行时错误,但我认为它们不是空指针异常。我认为这始于我进行更改以解决已经导致问题的问题。

感谢任何帮助。

这是 Java 文件:

import android.app.Activity;  <br>
import android.os.Bundle;  <br>
import android.widget.Button;   <br>
import android.widget.EditText;  <br>
import android.widget.TextView;  <br>

public class AndroidFactoringActivity extends Activity {

    // Instance Variables
    EditText userNumber;
    Button factorButton;
    TextView resultsField;
    int factorResults;

    /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    factorButton = (Button) findViewById(R.id.factorButton);
    userNumber = (EditText) findViewById(R.id.userNumber);
    factorResults = 1;
    resultsField.setText(String.valueOf(factorResults));
}   
}

这是 main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/askField"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/ask"
        android:textSize="24dp" />

    <EditText
        android:id="@+id/userNumber"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="number" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/factorButton"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/click" />

    <TextView
        android:id="@+id/resultsField"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/tell"
        android:textSize="24dp" />
</LinearLayout>

这是 log.cat 结果:

 03-31 23:58:53.579: D/AndroidRuntime(2804): Shutting down VM

    03-31 23:58:53.589: W/dalvikvm(2804): threadid=3: thread exiting with uncaught exception (group=0x4001b188)

    03-31 23:58:53.589: E/AndroidRuntime(2804): Uncaught handler: thread main exiting due to uncaught exception

    03-31 23:58:53.650: E/AndroidRuntime(2804): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.dave_b.factoring/net.dave_b.factoring.AndroidFactoringActivity}: java.lang.NullPointerException

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at android.os.Handler.dispatchMessage(Handler.java:99)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at android.os.Looper.loop(Looper.java:123)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at android.app.ActivityThread.main(ActivityThread.java:4363)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at java.lang.reflect.Method.invokeNative(Native Method)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at java.lang.reflect.Method.invoke(Method.java:521)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at dalvik.system.NativeStart.main(Native Method)

    03-31 23:58:53.650: E/AndroidRuntime(2804): Caused by: java.lang.NullPointerException

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at net.dave_b.factoring.AndroidFactoringActivity.onCreate(AndroidFactoringActivity.java:26)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)

    03-31 23:58:53.650: E/AndroidRuntime(2804):     ... 11 more

    03-31 23:58:53.679: I/dalvikvm(2804): threadid=7: reacting to signal 3

    03-31 23:58:53.679: E/dalvikvm(2804): Unable to open stack trace file '/data/anr/traces.txt': Permission denied

    03-31 23:59:57.629: I/Process(2804): Sending signal. PID: 2804 SIG: 9

    04-01 00:07:36.129: D/AndroidRuntime(3040): Shutting down VM

    04-01 00:07:36.129: W/dalvikvm(3040): threadid=3: thread exiting with uncaught exception (group=0x4001b188)

    04-01 00:07:36.139: E/AndroidRuntime(3040): Uncaught handler: thread main exiting due to uncaught exception

    04-01 00:07:36.159: E/AndroidRuntime(3040): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.dave_b.factoring/net.dave_b.factoring.AndroidFactoringActivity}: java.lang.NullPointerException

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at android.os.Handler.dispatchMessage(Handler.java:99)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at android.os.Looper.loop(Looper.java:123)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at android.app.ActivityThread.main(ActivityThread.java:4363)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at java.lang.reflect.Method.invokeNative(Native Method)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at java.lang.reflect.Method.invoke(Method.java:521)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at dalvik.system.NativeStart.main(Native Method)

    04-01 00:07:36.159: E/AndroidRuntime(3040): Caused by: java.lang.NullPointerException

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at net.dave_b.factoring.AndroidFactoringActivity.onCreate(AndroidFactoringActivity.java:26)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)

    04-01 00:07:36.159: E/AndroidRuntime(3040):     ... 11 more

    04-01 00:07:36.199: I/dalvikvm(3040): threadid=7: reacting to signal 3

    04-01 00:07:36.199: E/dalvikvm(3040): Unable to open stack trace file '/data/anr/traces.txt': Permission denied

    04-01 00:07:40.329: I/Process(3040): Sending signal. PID: 3040 SIG: 9

最佳答案

resultsField.setText(String.valueOf(factorResults));

resultsFieldnull 并且您正在尝试将值设置为 null。

resultsField= (TextView ) findViewById(R.id.userNumber);

在设置值之前获取 textview 实例,否则 resultsField 将为 null 并且所有对 null 引用的操作都会导致 NullPointerException.

关于android - 第一个 Android 应用程序中的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13106370/

相关文章:

java - 什么是 NullPointerException,我该如何解决?

getReadableDatabase 上的 android 空指针异常

java - 在 switch 语句中使用游标 (SQLite) 移动时出现 NullPointerException

android - 使 Android Activity 看起来像对话框

Android - 只绘制可见的部分

java - TabWidget 中的 Android Spinner 错误 token

java - 如何在 Android 中设置 SwitchPreference 的默认值?

Android:如何使用非字符串选择参数查询 SQLiteDatabase?

java.lang.NullPointerException : Loading three charts (from github) into a 2x2 GridView

android - 使用 radiobutton.getText() 时在 logcat 中获取空指针异常