Странная ошибка в распознавании жестов Android - PullRequest
1 голос
/ 08 февраля 2012

В моей программе я использую прослушиватель onGesturePerformed для распознавания жеста, а затем пытаюсь показать 5 лучших прогнозов.Я использую arrayList предсказания , чтобы хранить оценки и имена жестов.Затем я храню результаты в двойном массиве и сортирую их.Я пытаюсь получить имена соответствующих партитур из 5 лучших баллов.

Вот мой слушатель:

private OnGesturePerformedListener handleGestureListener2 = new OnGesturePerformedListener() {
        public void onGesturePerformed(GestureOverlayView gestureView,
                Gesture gesture) {

            ArrayList<Prediction> predictions = gLib.recognize(gesture);
            HashMap<Double,String> sm=new HashMap<Double, String>();
            double[] d=new double[predictions.size()];
            // one prediction needed
            if (predictions.size()> 0) {        
                if(predictions.size()>=5)
                {
                    for(int j=0;j<predictions.size();j++)
                    {
                        sm.put(predictions.get(j).score,predictions.get(j).name);
                        d[j]=predictions.get(j).score;
                    }
                    Arrays.sort(d);

                    for(int m=d.length;m>=(d.length-5);m--)
                    {

                        double score=d[m];
                        String a=sm.get(score);
                        String key=null;
                        if(a.charAt(1)=='_')
                        {
                            char b=a.charAt(0);
                            key=Character.toString(b);
                        }
                        else
                        {
                            key=a.substring(0, 1);
                        finalmssg=finalmssg+unicodeVal.get(key)+"---->>"+score+"\n";
                    }
                    }
                }
                else{
                    for(int i=0;i<predictions.size();i++)
                    {
                        Prediction prediction = predictions.get(i);
                        String a=prediction.name;
                        String key=null;
                        if(a.charAt(1)=='_')
                        {
                            char b=a.charAt(0);
                            key=Character.toString(b);
                        }
                        else
                            key=a.substring(0, 1);
                        finalmssg=finalmssg+unicodeVal.get(key)+"---->>"+prediction.score+"\n";
                    }
                }

                showResults(finalmssg);

                // checking prediction

            }

        }
    };

, и он показывает следующую ошибку

02-08 22:07:54.081: W/dalvikvm(9933): threadid=1: thread exiting with uncaught exception (group=0x40018560)
02-08 22:07:54.081: E/AndroidRuntime(9933): FATAL EXCEPTION: main
02-08 22:07:54.081: E/AndroidRuntime(9933): java.lang.ArrayIndexOutOfBoundsException
02-08 22:07:54.081: E/AndroidRuntime(9933):     at com.android.detect.DetectActivity$1.onGesturePerformed(DetectActivity.java:171)
02-08 22:07:54.081: E/AndroidRuntime(9933):     at android.gesture.GestureOverlayView.fireOnGesturePerformed(GestureOverlayView.java:730)
02-08 22:07:54.081: E/AndroidRuntime(9933):     at android.gesture.GestureOverlayView.access$400(GestureOverlayView.java:55)
02-08 22:07:54.081: E/AndroidRuntime(9933):     at android.gesture.GestureOverlayView$FadeOutRunnable.run(GestureOverlayView.java:745)
02-08 22:07:54.081: E/AndroidRuntime(9933):     at android.os.Handler.handleCallback(Handler.java:587)
02-08 22:07:54.081: E/AndroidRuntime(9933):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-08 22:07:54.081: E/AndroidRuntime(9933):     at android.os.Looper.loop(Looper.java:130)
02-08 22:07:54.081: E/AndroidRuntime(9933):     at android.app.ActivityThread.main(ActivityThread.java:3835)
02-08 22:07:54.081: E/AndroidRuntime(9933):     at java.lang.reflect.Method.invokeNative(Native Method)
02-08 22:07:54.081: E/AndroidRuntime(9933):     at java.lang.reflect.Method.invoke(Method.java:507)
02-08 22:07:54.081: E/AndroidRuntime(9933):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
02-08 22:07:54.081: E/AndroidRuntime(9933):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
02-08 22:07:54.081: E/AndroidRuntime(9933):     at dalvik.system.NativeStart.main(Native Method)
02-08 22:12:54.121: I/Process(9933): Sending signal. PID: 9933 SIG: 9
...