質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

解決済

ディレクトリ内のテキストファイルを読み込みたい

rott
rott

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

1回答

0評価

0クリップ

420閲覧

投稿2021/12/26 05:38

前提・実現したいこと

AndroidstudioでJavaを使ってクイズアプリを作っています。
ファイル内のテキストファイルをString[] getFilenameに読み込み、さらに拡張子を消したものをString[] Filename格納するところでエラーが起きています。
自分ではどうしたらよいのかわからないので質問しました。

発生している問題・エラーメッセージ

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.namaeate, PID: 28012 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.namaeate/com.example.namaeate.MainActivity}: java.lang.NullPointerException: Attempt to get length of null array at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: java.lang.NullPointerException: Attempt to get length of null array at com.example.namaeate.MainActivity.onCreate(MainActivity.java:85) at android.app.Activity.performCreate(Activity.java:7994) at android.app.Activity.performCreate(Activity.java:7978) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:223)  at android.app.ActivityThread.main(ActivityThread.java:7656)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

該当のソースコード

不必要なところはカットしたのでエラーが出ている85行目は
for(i = 0; i < listFile.length; i++) の所です

MainActivity.java

package com.example.namaeate; import androidx.appcompat.app.AppCompatActivity; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.content.Intent; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import java.io.BufferedReader; import java.io.File; import java.io.FilenameFilter; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class MainActivity extends AppCompatActivity { private Button ansBtn1; private Button ansBtn2; private Button ansBtn3; private Button ansBtn4; private Button maisu1_Button; public int prob = 2; //問題数 public int quiz; //現在の問題番号 public int i; public int j = 0; public int ans = 0; public int count = 0; //正解数 public int backcount = 0; //やり直し回数 public int maisu; // クイズデータの準備 public String[][] quizData = new String[prob][4]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getId(); //フォルダ内のテキストファイルの読み込み //フィルタを作成する String[] getFilename = new String[100]; File dir = new File("assets/kanji"); File[] listFile = dir.listFiles(); String[] Filename = new String[100]; for(i = 0; i < listFile.length; i++) { //errorが出たところ if (listFile[i].getName().contains(".txt")) { getFilename[i] = listFile[i].getName(); //拡張子を消してテキストファイルの名前をFilenameに保存 Filename[i] = getFilename[i].substring(0,getFilename[i].lastIndexOf('.')); } else {//何もしない } } List<String> list = new ArrayList<String>();// リストを作成 for(i = 0;i < j;i++) { list.add(String.valueOf(i)); } Collections.shuffle(list); //テキストファイルのテキストを行ごとにtextに保存 InputStream is = null; BufferedReader br = null; String[] text = new String[100]; j = 0; try { try { // assetsフォルダ内のtxtをオープンする is = this.getAssets().open("kanji/"+ Filename +".txt"); br = new BufferedReader(new InputStreamReader(is)); // 1行ずつ読み込み、改行を付加する String str = null; while ((str = br.readLine()) != null) { text[j] = str ; j++; } } finally { if (is != null) is.close(); if (br != null) br.close(); } } catch (Exception e){ // エラー発生時の処理 } //選択肢ランダム化 List<String> list2 = new ArrayList<String>();// リストを作成 for(i = 0;i < j;i++) { list2.add(String.valueOf(i)); } Collections.shuffle(list2); quizData[quiz][0] = getFilename[Integer.parseInt(list.get(quiz))];//正解 quizData[quiz][1] = text[Integer.parseInt(list2.get(0))];//選択肢1 quizData[quiz][2] = text[Integer.parseInt(list2.get(1))];//選択肢2 quizData[quiz][3] = text[Integer.parseInt(list2.get(2))];//選択肢3 //showQuiz List<Integer> num; switch (maisu) { case 1: ansBtn1.setVisibility(View.GONE); ansBtn2.setVisibility(View.GONE); ansBtn3.setVisibility(View.GONE); ansBtn4.setVisibility(View.GONE); break; case 2: ansBtn3.setVisibility(View.GONE); ansBtn4.setVisibility(View.GONE); maisu1_Button.setVisibility(View.GONE); num = Arrays.asList(0, 1); Collections.shuffle(num); ansBtn1.setText(quizData[quiz][num.get(0)]); ansBtn2.setText(quizData[quiz][num.get(1)]); break; case 3: ansBtn4.setVisibility(View.GONE); maisu1_Button.setVisibility(View.GONE); num = Arrays.asList(0, 1, 2); Collections.shuffle(num); ansBtn1.setText(quizData[quiz][num.get(0)]); ansBtn2.setText(quizData[quiz][num.get(1)]); ansBtn3.setText(quizData[quiz][num.get(2)]); break; case 4: maisu1_Button.setVisibility(View.GONE); num = Arrays.asList(0, 1, 2, 3); Collections.shuffle(num); ansBtn1.setText(quizData[quiz][num.get(0)]); ansBtn2.setText(quizData[quiz][num.get(1)]); ansBtn3.setText(quizData[quiz][num.get(2)]); ansBtn4.setText(quizData[quiz][num.get(3)]); break; } } public void getId(){ ansBtn1 = findViewById(R.id.bt1); ansBtn2 = findViewById(R.id.bt2); ansBtn3 = findViewById(R.id.bt3); ansBtn4 = findViewById(R.id.bt4); maisu1_Button = findViewById(R.id.maisu1_button); } public void onButton(View view){ //押されたボタン Button clickedBtn =(Button)view; String clickedAns =clickedBtn.getText().toString(); if(clickedAns.equals(quizData[quiz][0])){ //正解 ans = 0; }else{ //不正解 ans = 1; } Intent intent = new Intent(MainActivity.this,Answer.class); //Answerに送る変数 intent.putExtra("maisu",maisu); intent.putExtra("ans",ans); intent.putExtra("quiz", quiz); intent.putExtra("prob",prob); intent.putExtra("count",count); intent.putExtra("backcount",backcount); startActivity(intent); finish(); } }

補足情報(FW/ツールのバージョンなど)

Androidstudioのバージョン

Android Studio Arctic Fox | 2020.3.1 Patch 4
Build #AI-203.7717.56.2031.7935034, built on November 21, 2021
ランタイム・バージョン: 11.0.10+0-b96-7249189 amd64
VM: OpenJDK 64-Bit Server VM by Oracle Corporation
Windows 10 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 1280M
Cores: 6
Registry: external.system.auto.import.disabled=true
Non-Bundled Plugins: org.jetbrains.kotlin

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2021/12/26 07:11

> NullPointerException ですから、 listFile が null なのでしょう。 > どうしたらよいのかわからない なぜ listFile が null になるのかを調べて対処する必要があるのでは無いでしょうか。 なお、 i や j といったループに使う変数までフィールドにするのは止めたほうが良いです。 「何度も使うから最初から用意しておく」という理由でしたら、それは「分かり難いバグの原因」の危険性より優先されるものではありません。 変数のスコープを極力狭くし、コードの部分々々の独立性を高めることでの再利用性や安全性、読み易さ・修正し易さ等を確保するほうが重要です。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。