1

バックグラウンド サービスからアプリケーション フォルダにディレクトリを作成したい。getDir を使用してディレクトリを作成しました。ディレクトリを作成するためのサービス コンテキストを DataManager に送信しています。また、これに対して null コンテキストを受信して​​いないことを確認しました。しかし、「ctx.getDir("Application_Name", Context.MODE_PRIVATE)」行でクラッシュしました。

private File systemDir;
private File dataDir;
public DataManager(Context ctx) {
    try{
    Log.e("xlogger", "DataManager Context : "+ctx);     
    systemDir = ctx.getDir("Application_Name", Context.MODE_PRIVATE );
    dataDir = new File(systemDir, "Data/");
    if(!dataDir.exists()){          
        dataDir.mkdir();
    }
    }catch (Exception e) {
        Log.e("xlogger", "DataManager Exception : "+Log.getStackTraceString(e));
    }
}

クラッシュレポート:

02-27 13:46:13.100: D/xlogger(4762): DataManager Context = com.MyApp.engine.MyService@4055ad38  
02-27 13:46:13.110: E/xlogger(4762): DataManager Exception : java.lang.NullPointerException
02-27 13:46:13.110: E/xlogger(4762):    at android.content.ContextWrapper.getDir(ContextWrapper.java:198)
02-27 13:46:13.110: E/xlogger(4762):    at com.MyApp.utils.DataManager.<init>(DataManager.java:30)
02-27 13:46:13.110: E/xlogger(4762):    at com.MyApp.communication.MyAppClient.getRulesXML(MyAppClient.java:867)
02-27 13:46:13.110: E/xlogger(4762):    at com.MyApp.engine.MyService$5.doInBackground(MyService.java:862)
02-27 13:46:13.110: E/xlogger(4762):    at com.MyApp.engine.MyService$5.doInBackground(MyService.java:1)
02-27 13:46:13.110: E/xlogger(4762):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
02-27 13:46:13.110: E/xlogger(4762):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
02-27 13:46:13.110: E/xlogger(4762):    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
02-27 13:46:13.110: E/xlogger(4762):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
02-27 13:46:13.110: E/xlogger(4762):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
02-27 13:46:13.110: E/xlogger(4762):    at java.lang.Thread.run(Thread.java:1019)

大変助かります。ありがとう。

4

1 に答える 1

0

getDir() または openFileOutput() : data/data// にファイルを作成します。これは、ルート化されていないモバイルでは利用できません。したがって、電話をルート化するか、成功した場合はエミュレーターで試すことをお勧めします。

それ以外の場合は、sdcard で getExternalFilesDirectory() --> を使用できますが、パスは Android/data//files/ であり、アプリにも非公開です。そのアプリケーションをアンインストールすると、これらのファイルでさえ削除されます:-)

助けがあれば常に評価してください:-)

于 2013-02-27T09:53:46.827 に答える