【问题标题】:What Kind of Code Can I Not Put Into the onCreate Method哪些代码不能放入 onCreate 方法
【发布时间】:2014-06-30 03:03:11
【问题描述】:

所以我正在制作一个简单的游戏应用程序,它计算 Main Activity 中的分数,然后将这个整数发送到一个新的 Activity。然后我在这个新的活动中有一个文本视图,它假设通过意图发送整数,并将其设置为文本视图的文本(所以基本上它发送用户的分数,并在另一个活动中显示分数)。我将此代码放入新 Activity 的 onCreate() 中,但它在“ScoreText.setText(score2);”行崩溃其中 ScoreText 是文本视图, score2 是一个字符串。我不知道我是否不允许在 onCreate() 中更改视图的属性,但似乎我不能。我还尝试将此代码放入一个方法中,并在 onCreate() 中启动该方法,但这也会使应用程序崩溃,所以我假设我也不能将方法放入 onCreate() 中。那么究竟我可以在 onCreate() 中添加什么?还有,在开始下一个活动后,我将如何更改文本视图的文本?

这是新 Activity 的 onCreate():

    TextView ScoreText;
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_level);


    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }

    Intent info=getIntent();
    int Score=info.getIntExtra("UsersScore", 0);
    String score2=""+Score;
    TextView ScoreText=(TextView)(findViewById(R.id.tvScore));
    ScoreText.setText(score2);

}

原木猫:

06-29 23:12:40.459: D/ActivityThread(20281): setTargetHeapUtilization:0.25
06-29 23:12:40.469: D/ActivityThread(20281): setTargetHeapIdealFree:8388608
06-29 23:12:40.469: D/ActivityThread(20281): setTargetHeapConcurrentStart:2097152
06-29 23:12:40.939: I/Adreno200-EGLSUB(20281): <ConfigWindowMatch:2136>: Format RGBA_8888.
06-29 23:12:41.009: **E**/(20281): <s3dReadConfigFile:75>: Can't open file for reading
06-29 23:12:41.009: **E**/(20281): <s3dReadConfigFile:75>: Can't open file for reading
06-29 23:12:43.462: W/dalvikvm(20281): threadid=1: thread exiting with uncaught exception (group=0x41642438)
06-29 23:12:43.462: **E**/AndroidRuntime(20281): FATAL EXCEPTION: main
06-29 23:12:43.462: **E**/AndroidRuntime(20281): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.thewordgame/com.example.thewordgame.LevelActivity}: java.lang.NullPointerException
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at android.app.ActivityThread.access$700(ActivityThread.java:143)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at android.os.Looper.loop(Looper.java:137)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at android.app.ActivityThread.main(ActivityThread.java:4953)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at java.lang.reflect.Method.invokeNative(Native Method)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at java.lang.reflect.Method.invoke(Method.java:511)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at dalvik.system.NativeStart.main(Native Method)
06-29 23:12:43.462: **E**/AndroidRuntime(20281): Caused by: java.lang.NullPointerException
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at com.example.thewordgame.LevelActivity.onCreate(LevelActivity.java:34)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at android.app.Activity.performCreate(Activity.java:5160)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
06-29 23:12:43.462: **E**/AndroidRuntime(20281):    ... 11 more

【问题讨论】:

    标签: java android oncreate


    【解决方案1】:

    您应该检查 id tvScore 的 textview 是否存在于您的 R.layout.activity_level 中。如果您有多个布局,请确保它们都包含此文本视图。

    【讨论】:

    • 是的,一切都在那里
    • 你能检查一下你的 Intent info 也不为空吗?
    • Intent intent=new Intent(this, LevelActivity.class); intent.putExtra("UsersScore", Score);开始活动(意图); //这是另一个Activity中的内容
    • 因为您的 logcat 在第 34 行清楚地说明了 nullpointer。如果那是 setTextline,那么 ScoreText 必须为 null。您必须向我们证明它不是 null 并且 textview 在您的布局中明确定义。
    • 编辑后的代码现在显示了我定义文本视图的位置。第 34 行是“String score2=""+Score;"。不是 setText 行。
    【解决方案2】:

    您绝对可以将这种代码放在 onCreate 方法中。

    但看起来 ScoreText 没有初始化。检查日志,如果可能的话,把它们放在这里。这将提供有关问题的更多详细信息。

    引起:java.lang.NullPointerException 06-29 23:12:43.462: **E**/AndroidRuntime(20281): 在 com.example.thewordgame.LevelActivity.onCreate(LevelActivity.java:34)

    LevelActivity.onCreate(LevelActivity.java:34)(第 34 行)上的代码是什么?

    【讨论】:

    • 我已经添加了logcat
    • String score2=""+Score;
    • 所以我把那行注释掉了,然后我把 "ScoreText.setText("1000");"
    • 应用仍然崩溃
    • 对不起,现在它指向第 36 行,这将是 setText 行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    相关资源
    最近更新 更多