Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法解释的空指针错误_Java_Android_Nullpointerexception - Fatal编程技术网

Java 无法解释的空指针错误

Java 无法解释的空指针错误,java,android,nullpointerexception,Java,Android,Nullpointerexception,我正在开发一个android应用程序,在这个应用程序中,用户被告知要画什么字母,字母识别是通过手势来处理的。我不知道为什么会这样。eclipse中没有检测到任何错误,但logcat表示这是一个空指针异常。这是我的申请代码: public class MainActivity extends Activity implements OnGesturePerformedListener { GestureLibrary mLibrary; Resources res; Str

我正在开发一个android应用程序,在这个应用程序中,用户被告知要画什么字母,字母识别是通过手势来处理的。我不知道为什么会这样。eclipse中没有检测到任何错误,但logcat表示这是一个空指针异常。这是我的申请代码:

public class MainActivity extends Activity implements OnGesturePerformedListener
{
    GestureLibrary mLibrary;
    Resources res;
    String [] letters;
    TextView tv = (TextView) findViewById(R.id.text);
    int i = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);
        if (!mLibrary.load())
        {
           finish();
        }

        res = getResources();
        letters = res.getStringArray(R.array.LetterToBeDrawn);
        tv.setText("Draw the letter: " + letters[i]);

        GestureOverlayView gestures = (GestureOverlayView)findViewById(R.id.gestures);
        gestures.addOnGesturePerformedListener(this);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) 
    { 
        ArrayList<Prediction> predictions = new ArrayList<Prediction>();  //this methods asks to recognize the gesture against loaded gesture library
        predictions = mLibrary.recognize(gesture);

        // We want at least one prediction
        if (predictions.size() > 0)
        {
            Prediction prediction = predictions.get(0);    //get the 1st prediction auto generated for you by Android
            // We want at least some confidence in the result
            if (prediction.score > 1.0 && prediction.name.equals(letters[i]))
            {
                // Show the spell
                Toast.makeText(MainActivity.this, prediction.name, Toast.LENGTH_SHORT).show();
            }
        }
    }
}
public类MainActivity扩展活动实现OnTesturePerformedListener
{
手势图书馆;
资源和资源;
字符串[]个字母;
TextView tv=(TextView)findViewById(R.id.text);
int i=1;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLibrary=GestureLibraries.fromRawResource(this,R.raw.bigests);
如果(!mLibrary.load())
{
完成();
}
res=getResources();
字母=res.getStringArray(R.array.LetterToBeDrawn);
tv.setText(“画字母:+字母[i]);
GestureOverlayView手势=(GestureOverlayView)findViewById(R.id.birters);
手势。添加感知性能监听器(此);
}
@凌驾
公共布尔onCreateOptions菜单(菜单)
{
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
已执行的检测的公共无效(手势覆盖视图覆盖、手势)
{ 
ArrayList predictions=new ArrayList();//此方法要求根据加载的手势库识别手势
预测=大脑识别(手势);
//我们至少需要一个预测
如果(预测值.size()>0)
{
Prediction Prediction=predictions.get(0);//获取Android自动生成的第一个预测
//我们希望至少对结果有一些信心
如果(prediction.score>1.0&&prediction.name.equals(字母[i]))
{
//施展咒语
Toast.makeText(MainActivity.this、prediction.name、Toast.LENGTH_SHORT.show();
}
}
}
}
我的xml:

<android.gesture.GestureOverlayView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/gestures"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:fadeOffset="1000"
    android:gestureStrokeType="multiple"
    tools:context=".MainActivity" >

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

</android.gesture.GestureOverlayView>

日志:

04-30 14:36:45.716: D/AndroidRuntime(1558): Shutting down VM
04-30 14:36:45.716: W/dalvikvm(1558): threadid=1: thread exiting with uncaught exception (group=0xb2a27ba8)
04-30 14:36:45.776: E/AndroidRuntime(1558): FATAL EXCEPTION: main
04-30 14:36:45.776: E/AndroidRuntime(1558): Process: com.gmail.Sheridjohn.letterchecker, PID: 1558
04-30 14:36:45.776: E/AndroidRuntime(1558): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.gmail.Sheridjohn.letterchecker/com.gmail.Sheridjohn.letterchecker.MainActivity}: java.lang.NullPointerException
04-30 14:36:45.776: E/AndroidRuntime(1558):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at android.os.Handler.dispatchMessage(Handler.java:102)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at android.os.Looper.loop(Looper.java:136)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at android.app.ActivityThread.main(ActivityThread.java:5017)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at java.lang.reflect.Method.invokeNative(Native Method)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at java.lang.reflect.Method.invoke(Method.java:515)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at dalvik.system.NativeStart.main(Native Method)
04-30 14:36:45.776: E/AndroidRuntime(1558): Caused by: java.lang.NullPointerException
04-30 14:36:45.776: E/AndroidRuntime(1558):     at android.app.Activity.findViewById(Activity.java:1884)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at com.gmail.Sheridjohn.letterchecker.MainActivity.<init>(MainActivity.java:23)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at java.lang.Class.newInstanceImpl(Native Method)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at java.lang.Class.newInstance(Class.java:1208)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
04-30 14:36:45.776: E/AndroidRuntime(1558):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
04-30 14:36:45.776: E/AndroidRuntime(1558):     ... 11 more
04-3014:36:45.716:D/AndroidRuntime(1558):关闭虚拟机
04-30 14:36:45.716:W/dalvikvm(1558):threadid=1:线程以未捕获异常退出(组=0xb2a27ba8)
04-30 14:36:45.776:E/AndroidRuntime(1558):致命异常:主
04-30 14:36:45.776:E/AndroidRuntime(1558):进程:com.gmail.Sheridjohn.letterchecker,PID:1558
04-30 14:36:45.776:E/AndroidRuntime(1558):java.lang.RuntimeException:无法实例化活动组件信息{com.gmail.Sheridjohn.letterchecker/com.gmail.Sheridjohn.letterchecker.MainActivity}:java.lang.NullPointerException
04-30 14:36:45.776:E/AndroidRuntime(1558):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
04-30 14:36:45.776:E/AndroidRuntime(1558):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
04-30 14:36:45.776:E/AndroidRuntime(1558):在android.app.ActivityThread.access$800(ActivityThread.java:135)
04-30 14:36:45.776:E/AndroidRuntime(1558):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
04-30 14:36:45.776:E/AndroidRuntime(1558):在android.os.Handler.dispatchMessage(Handler.java:102)上
04-30 14:36:45.776:E/AndroidRuntime(1558):在android.os.Looper.loop(Looper.java:136)
04-30 14:36:45.776:E/AndroidRuntime(1558):在android.app.ActivityThread.main(ActivityThread.java:5017)上
04-30 14:36:45.776:E/AndroidRuntime(1558):位于java.lang.reflect.Method.Invokenactive(本机方法)
04-30 14:36:45.776:E/AndroidRuntime(1558):位于java.lang.reflect.Method.invoke(Method.java:515)
04-30 14:36:45.776:E/AndroidRuntime(1558):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-30 14:36:45.776:E/AndroidRuntime(1558):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-30 14:36:45.776:E/AndroidRuntime(1558):在dalvik.system.NativeStart.main(本机方法)
04-30 14:36:45.776:E/AndroidRuntime(1558):由以下原因引起:java.lang.NullPointerException
04-30 14:36:45.776:E/AndroidRuntime(1558):在android.app.Activity.findViewById(Activity.java:1884)
04-30 14:36:45.776:E/AndroidRuntime(1558):在com.gmail.Sheridjohn.letterchecker.MainActivity。(MainActivity.java:23)
04-30 14:36:45.776:E/AndroidRuntime(1558):位于java.lang.Class.newInstanceImpl(本机方法)
04-30 14:36:45.776:E/AndroidRuntime(1558):位于java.lang.Class.newInstance(Class.java:1208)
04-30 14:36:45.776:E/AndroidRuntime(1558):在android.app.Instrumentation.newActivity(Instrumentation.java:1061)上
04-30 14:36:45.776:E/AndroidRuntime(1558):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
04-30 14:36:45.776:E/AndroidRuntime(1558):。。。还有11个

在调用
setContentView
之前,您的活动正在调用
findViewById
。Move
tv=(TextView)findviewbyd(R.id.text)编码到onCreate中。

您有

 TextView tv = (TextView) findViewById(R.id.text);
在将布局设置为活动之前。初始化失败
tv
为空。您需要先将布局设置为“活动”,然后初始化视图

当你有

   tv.setText("Draw the letter: " + letters[i]);
当tv实际为空时,您正在调用setText

从laalto提供的链接发布源代码。多亏了他,我更正了我的帖子

1877    /**
1878     * Finds a view that was identified by the id attribute from the XML that
1879     * was processed in {@link #onCreate}.
1880     *
1881     * @return The view if found or null otherwise.
1882     */
1883    public View findViewById(int id) {
1884        return getWindow().findViewById(id);
1885    }
1886
您的stacktrace确实指出了原因,正如您在标题中发布的那样,原因并非无法解释

原因:java.lang.NullPointerException 04-30 14:36:45.776: E/AndroidRuntime(1558):在 android.app.Activity.findviewbyd(Activity.java:1884)04-30 14:36:45.776:E/AndroidRuntime(1558):在 com.gmail.Sheridjohn.letterchecker.MainActivity.(MainActivity.java:23)


原因是您在
onCreate()之前调用了
findViewById()