0

緊急の助けが必要です。内部ストレージ ファイルへの書き込みと読み取りで、ほんの数時間前にうまく機能していたアプリケーションがあります。家に帰ってデバイスで実行すると、強制終了が始まります! これは私にはまったく意味がありません。私の唯一の推測は、読み込もうとしているファイルがどういうわけか今そこにないということですか? アプリケーションの多数の場所でこのファイルを読み書きしようとしています。LogCat で受け取ったエラーを次に示します。

    06-21 18:14:34.666: W/dalvikvm(5349): threadid=1: thread exiting with uncaught exception (group=0x40015560)
06-21 18:14:34.682: E/AndroidRuntime(5349): FATAL EXCEPTION: main
06-21 18:14:34.682: E/AndroidRuntime(5349): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wglxy.example.dash1/com.wglxy.example.dash1.F2Activity}: java.lang.NullPointerException
06-21 18:14:34.682: E/AndroidRuntime(5349):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at android.os.Looper.loop(Looper.java:130)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at android.app.ActivityThread.main(ActivityThread.java:3683)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at java.lang.reflect.Method.invokeNative(Native Method)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at java.lang.reflect.Method.invoke(Method.java:507)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:850)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at dalvik.system.NativeStart.main(Native Method)
06-21 18:14:34.682: E/AndroidRuntime(5349): Caused by: java.lang.NullPointerException
06-21 18:14:34.682: E/AndroidRuntime(5349):     at java.io.Reader.<init>(Reader.java:65)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at java.io.InputStreamReader.<init>(InputStreamReader.java:122)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at java.io.InputStreamReader.<init>(InputStreamReader.java:59)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at com.wglxy.example.dash1.Grid.readRawText(Grid.java:214)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at com.wglxy.example.dash1.F2Activity.onCreate(F2Activity.java:75)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-21 18:14:34.682: E/AndroidRuntime(5349):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
06-21 18:14:34.682: E/AndroidRuntime(5349):     ... 11 more

メソッド readRawText を含む私の Grid クラスでは、特定の行について不平を言っています: InputStreamReader inputReader = new InputStreamReader(his). 上記の「fis」は、特定のディレクトリを念頭に置いて宣言されています。

readRawText のそのメソッドのコードは次のとおりです.....

public static String readRawText(Context context)
  {

      FileInputStream fis = null;
    try {
        fis = new FileInputStream("/data/data/com.wglxy.example.dash1/app_myDir/output.txt");
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

      InputStreamReader inputReader = new InputStreamReader(fis);
      BufferedReader buffReader = new BufferedReader(inputReader);
      String line;
      StringBuilder textFile = new StringBuilder();

      try
      {
          while((line = buffReader.readLine()) != null)
          {
              textFile.append(line);
             // textFile.append('\n');

          }
      }
      catch (IOException e)
      {
          return null;
      }

      return textFile.toString();
  } 

}

それが私に与えているエラーはヌルポインタエラーなので、どういうわけかファイルが消えた可能性があると考え続けています。このアプリケーションが正しく動作するように 1 日を費やしましたが、現在は動作していません。それはただの落胆です!あなたは何かを成し遂げたと思いますが、そうではありません...

繰り返しになりますが、誰かがこれを修正する方法を教えてくれたり、貴重なアドバイスをくれたりしてくれたら幸いです。

更新は、F2Activity での私の WRITEGRIDS メソッドです....

public void writeGrids(List<Grid> grids) throws IOException
{
    String data;
    FileOutputStream fos = null;

     try
     {
     File dir = getDir("myDir", Context.MODE_PRIVATE);
     Log.d("SEE",dir.getAbsolutePath());
     File myFiles = new File(dir, "output.txt");


     fos = new FileOutputStream(myFiles);




     for(Grid grid : grids)
     {
         data = grid.getGridNickName() + ";" + grid.getGridName() + ";" +
                  grid.getFirstName() + ";" + grid.getLastName() + ";" +
                  grid.getPassword()+ ";" + grid.getLoginURI() + ";"; 
         fos.write(data.getBytes());
     }
     }


      catch (Exception e)
     {
         System.err.println("Error: " + e.getMessage());
     }

     fos.close();

}

だから私は私のコードの一番上に File dir などの部分を置く必要があると思いますか?しかし、プログラムを実行するたびに新しいファイルを作成する必要はありませんか? 無知に聞こえたら申し訳ありません。私はアンドロイドにかなり慣れていませんが、この時点まではとても楽しかったです。

4

1 に答える 1

1

行で NullPointerException を取得しています

InputStreamReader inputReader = new InputStreamReader(fis);

FileInputStream を初期化するときに、FileNotFoundException もキャッチしています。私の推測では、ファイルが単に存在せず、参照変数「fis」が null に割り当てられているため、FileNotFoundException がスローされていると思われます。

output.txt はどこから来たのですか? どこで作成されますか?ファイル /app_myDir/output.txt が作成されていて、この時点で到達していないアプリ内の場所はありますか?

また、強制終了の問題を簡単に修正するには、「fis」が null かどうかを確認する必要があります。null でない場合は、処理を続行します (ファイルがそこにあると比較的確信している場合でも、これは良い方法です)。

if (fis != null) {
    InputStreamReader inputReader = new InputStreamReader(fis);
    BufferedReader buffReader = new BufferedReader(inputReader);
    String line;
    StringBuilder textFile = new StringBuilder();

    try
    {
        while((line = buffReader.readLine()) != null)
        {
            textFile.append(line);
            // textFile.append('\n');
        }
    }
    catch (IOException e)
    {
        return null;
    }

    return textFile.toString();
} else 
    return null;
于 2012-06-21T23:18:49.687 に答える