2012-10-27 55 views
1

請看看下面的代碼致命異常/無法實例錯誤的Android

activity_main.xml中

<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" > 

    <EditText 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     /> 

</LinearLayout> 

MainActivity.java

package com.example.textbox; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.DialogInterface; 
import android.view.KeyEvent; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnKeyListener; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    private EditText text = (EditText)findViewById(R.id.text); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     text.setOnKeyListener(new TextMaker()); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    private class TextMaker implements OnKeyListener 
    { 

     String str = text.getText().toString(); 


     public boolean onKey(View arg0, int keyCode, KeyEvent event) 
     { 
      if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) 
      { 
       Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show(); 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
    } 
} 

當我運行此應用程序,我收到以下錯誤

10-27 19:05:46.487: D/AndroidRuntime(339): Shutting down VM 
10-27 19:05:46.487: W/dalvikvm(339): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
10-27 19:05:46.527: E/AndroidRuntime(339): FATAL EXCEPTION: main 
10-27 19:05:46.527: E/AndroidRuntime(339): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.textbox/com.example.textbox.MainActivity}: java.lang.NullPointerException 
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569) 
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
10-27 19:05:46.527: E/AndroidRuntime(339): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-27 19:05:46.527: E/AndroidRuntime(339): at android.os.Looper.loop(Looper.java:123) 
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.ActivityThread.main(ActivityThread.java:3683) 
10-27 19:05:46.527: E/AndroidRuntime(339): at java.lang.reflect.Method.invokeNative(Native Method) 
10-27 19:05:46.527: E/AndroidRuntime(339): at java.lang.reflect.Method.invoke(Method.java:507) 
10-27 19:05:46.527: E/AndroidRuntime(339): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
10-27 19:05:46.527: E/AndroidRuntime(339): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
10-27 19:05:46.527: E/AndroidRuntime(339): at dalvik.system.NativeStart.main(Native Method) 
10-27 19:05:46.527: E/AndroidRuntime(339): Caused by: java.lang.NullPointerException 
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.Activity.findViewById(Activity.java:1647) 
10-27 19:05:46.527: E/AndroidRuntime(339): at com.example.textbox.MainActivity.<init>(MainActivity.java:15) 
10-27 19:05:46.527: E/AndroidRuntime(339): at java.lang.Class.newInstanceImpl(Native Method) 
10-27 19:05:46.527: E/AndroidRuntime(339): at java.lang.Class.newInstance(Class.java:1409) 
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561) 
10-27 19:05:46.527: E/AndroidRuntime(339): ... 11 more 

這是爲什麼?請幫忙!

回答

2

在指定我們正在考慮的佈局後,我們需要引用EditText。 我認爲setContentView()可以幫助您瞭解我們正在考慮的佈局。因此,請在setContentView()聲明後嘗試使用findViewById()初始化EditText。

更換

private EditText text = (EditText)findViewById(R.id.text); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     text.setOnKeyListener(new TextMaker()); 
    } 

private EditText text ; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     text = (EditText)findViewById(R.id.text); 
     text.setOnKeyListener(new TextMaker()); 
    } 
+0

由於內只使用findViewById()!我非常感謝你的幫助! –

+0

我的榮幸。快樂編碼 –

1

onCreate()

+0

感謝您的回覆。對此,我真的非常感激 :) –

相關問題