2

助けてください....

テキストファイルを作成してSDカードに保存するAndroid2.2用のアプリを作成しました。別のアクティビティでは、このファイルを読み取り、配列に格納します。アプリは2.2で正常に動作し、4.1で私のサムスンネクサスで完全に動作しました。(ICS)しかし、ジェリービーンズ(4.2)にアップデートしたばかりで、ファイルを開こうとするとアプリがクラッシュするようになりました。4.2のマニフェストに読み取り権限を追加する方法に関するドキュメントを読み、これを追加しましたが、アプリがクラッシュします。ログキャットはエミュレーターでは正常に動作しますが、私の電話では動作しないため、ログキャットはありません。

4.2または読み取り用にファイルを開く別の方法に必要な特別な権限はありますか?

これがディレクトリを作成してファイルを書くための私のコードです...

 //Create Reports Folder...........................................
      File directory = new File 
      (Environment.getExternalStorageDirectory().getPath()+"/PatRecords");
              if (!directory.exists()) { 
                      directory.mkdir(); 


                      Toast.makeText(this, "NEW FOLDER CREATED", Toast.LENGTH_SHORT).show();
              } 

            //If Sd card available, and writable with no errors, then write file.........
            if ((mExternalStorageAvailable = true)&(mExternalStorageWriteable = true)&(Error==0))
                {       

                try {
                    File ReportFile = new File(directory.getPath()+"/"+FileName$);
                    ReportFile.createNewFile();

                    FileOutputStream fOut = new FileOutputStream(ReportFile);                   
                    OutputStreamWriter OutWriter = new OutputStreamWriter(fOut);

                    OutWriter.write(Tester$+"\r\n");
                    OutWriter.write(Company$+"\r\n");
                    OutWriter.write(Customer$+"\r\n");
                    OutWriter.write(Address1$+"\r\n");
                    OutWriter.write(Address2$+"\r\n");
                    OutWriter.write(PCode$+"\r\n");
                    OutWriter.write(Instr$+"\r\n");
                    OutWriter.write(Serial$+"\r\n");

                    OutWriter.close();
                    fOut.close();

                    Toast.makeText(this, "NEW FILE CREATED", Toast.LENGTH_SHORT).show();

                } catch (Exception e) {
                    Toast.makeText(getBaseContext(), e.getMessage(),
                            Toast.LENGTH_SHORT).show();
                }//End of try/catch


              }//End Write.....

そしてここに読むためのコードがあります....4.2ではなく4.1までは問題なく動作します...

FilePath=getIntent().getStringExtra("FileToOpen");

    //Open File and read first all data.......
    try {
        BufferedReader br = new BufferedReader(new FileReader(FilePath));

        Tester$ = br.readLine();
        Company$ = br.readLine();
        Customer$ = br.readLine();
        Address1$ = br.readLine();
        Address2$ = br.readLine();
        PCode$ = br.readLine();
        Instr$ = br.readLine();
        InstrSerial$ = br.readLine();
        NumOfTests$ = br.readLine();        
 br.close();
          Toast.makeText(this, "FILE LOADED OK.", Toast.LENGTH_SHORT).show();

          n = n+1;    //Increment n for next test number....

    }
    catch (IOException e) {
        //You'll need to add proper error handling here
        Toast.makeText(getBaseContext(), e.getMessage(),
                Toast.LENGTH_SHORT).show();

どんな助けでも大歓迎です...見てくれてありがとう

4

1 に答える 1

2

私自身の質問に答えると、Android 4.2 では複数のユーザーが許可され、そのユーザーによって作成されたものでない限り、ファイルを開くことができるようになりました。読み込もうとしていたファイルは 4.1 で作成されたものであるため、アプリを開いて読み取ることはできません。アプリを実行して新しいファイルを作成しましたが、正常に動作します。

これが同様の問題を抱えている人の助けになることを願っています。

于 2012-11-26T19:51:31.490 に答える