2

rawフォルダーからtxtファイルを読み取って、アプリの整数配列を作成しようとしています。txt にはすべての行に番号があり、次のようになります。

test.txt

1
3
4
5
6
2
-9
...

私の配列はこのようになることを意図していますInteger[] vector = {1,2,3,4,5,6,2,-9,...}

私が展開しているコード(実際にはクリックコールバックメソッド内にあります):

public void plotSPLinfBaffle(View v) {
    List<Integer> vector = new ArrayList<Integer>();

    InputStream in = getResources().openRawResource(R.raw.test);
    Scanner sc = new Scanner(new InputStreamReader(in));

    while(sc.hasNext()){

        vector.add(Integer.parseInt(sc.nextLine()));
    }

    Log.d("clicked" , sc.nextLine());

    Integer[] splVector = vector.toArray(new Integer[0]);
}

ご覧のとおり、次のランタイム エラーと logcat メッセージが表示され続けます。

02-21 14:04:35.599: D/AndroidRuntime(19925): Shutting down VM
02-21 14:04:35.599: W/dalvikvm(19925): threadid=1: thread exiting with uncaught exception (group=0x40018578)
02-21 14:04:35.619: E/AndroidRuntime(19925): FATAL EXCEPTION: main
02-21 14:04:35.619: E/AndroidRuntime(19925): java.lang.IllegalStateException: Could not execute method of the activity
02-21 14:04:35.619: E/AndroidRuntime(19925):    at android.view.View$1.onClick(View.java:2144)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at android.view.View.performClick(View.java:2485)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at android.view.View$PerformClick.run(View.java:9080)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at android.os.Handler.handleCallback(Handler.java:587)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at android.os.Looper.loop(Looper.java:130)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at android.app.ActivityThread.main(ActivityThread.java:3687)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at java.lang.reflect.Method.invokeNative(Native Method)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at java.lang.reflect.Method.invoke(Method.java:507)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at dalvik.system.NativeStart.main(Native Method)
02-21 14:04:35.619: E/AndroidRuntime(19925): Caused by: java.lang.reflect.InvocationTargetException
02-21 14:04:35.619: E/AndroidRuntime(19925):    at java.lang.reflect.Method.invokeNative(Native Method)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at java.lang.reflect.Method.invoke(Method.java:507)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at android.view.View$1.onClick(View.java:2139)
02-21 14:04:35.619: E/AndroidRuntime(19925):    ... 11 more
02-21 14:04:35.619: E/AndroidRuntime(19925): Caused by: java.util.NoSuchElementException
02-21 14:04:35.619: E/AndroidRuntime(19925):    at java.util.Scanner.nextLine(Scanner.java:1417)
02-21 14:04:35.619: E/AndroidRuntime(19925):    at com.soulmagnet.speakerparametrix2.PlotInfBaffle.plotSPLinfBaffle(PlotInfBaffle.java:136)
02-21 14:04:35.619: E/AndroidRuntime(19925):    ... 14 more

それでも、デバッグモードでブレークポイントを並べて配置すると、次のようになります。

22 vector.add(Integer.parseInt(sc.nextLine()));

すべての反復でベクトル変数を見ることができますが、それが完了すると、何かがいっぱいになるとアクティビティが殺されます...

私は何がうまくいかないのか理解できません。それが私が助けを求めている理由です!

前もって感謝します!

4

3 に答える 3

3

スタックトレースとメソッドのドキュメントを注意深く見てくださいScanner.nextLine()

このループで入力ファイルのすべての行を食べています:

while (sc.hasNext()) {
    vector.add(Integer.parseInt(sc.nextLine()));
}

ただし、次の行で:

Log.d("clicked" , sc.nextLine());

nextLine()すでに終了している入力を呼び出します。のドキュメントに従ってScanner.nextLine()

スロー:

NoSuchElementException - 行が見つからない場合

この呼び出しにより、ScannerがスローされNoSuchElementExceptionます。単純にLog.d()行を削除するか、ループの最後の要素を記憶してから、その値を LogCat に記録します (それが意図している場合)。

于 2013-02-21T12:19:39.017 に答える
2

while-loop の後、scもう行が含まれていません (したがって、ループは終了しました)。

後であなたが持っている

 Log.d("clicked" , sc.nextLine());

これは別の行 (もう存在しない) を取得しようとするため、次のエラーが発生します。

E/AndroidRuntime(19925): Caused by: java.util.NoSuchElementException
E/AndroidRuntime(19925):    at java.util.Scanner.nextLine(Scanner.java:1417)
E/AndroidRuntime(19925):    at com.soulmagnet.speakerparametrix2.PlotInfBaffle.plotSPLinfBaffle(PlotInfBaffle.java:136)

(これは、完全なエラー ログに隠されています)

したがって、その行を削除すると、正しく機能するはずです。

于 2013-02-21T12:16:17.647 に答える
0

ログに「クリックされました」と表示されますか?

できれば、このログが印刷されるまでは問題ありません。

ログの興味深い部分。

14:04:35.619: E/AndroidRuntime(19925): ... 11 詳細 02-21 14:04:35.619: E/AndroidRuntime(19925):原因: java.util.NoSuchElementException 02-21 14:04:35.619 : E/AndroidRuntime(19925): java.util.Scanner.nextLine (Scanner.java:1417) 02-21 14:04:35.619: E/AndroidRuntime(19925): com.soulmagnet.speakerparametrix2.PlotInfBaffle.plotSPLinfBaffle( PlotInfBaffle.java:136) 02-21 14:04:35.619: E/AndroidRuntime(19925): ... 14 もっと見る

Scannerのドキュメントに は、改行がない場合にこの例外がスローされることが記載されています。

これはあなたの問題です

Log.d("clicked" , sc.nextLine()); 
于 2013-02-21T12:19:21.533 に答える