1

Android アプリケーションで内部ファイルを作成しようとしています。Java で正常に動作するコードを生成しましたが、内部ファイルを作成するには、そのためのコンテキストが必要だと思います。

例: ファイル file = new File(Context.getFilesDir(), "somefile.txt");

私が直面している問題は、ファイルの作成とそれが作成されたかどうかのチェックが、私が作成したシングルトン クラスで維持されていることです。以下を使用する場合

例: ファイル file = new File("somefile.txt");

すべてがコンパイルされて動作しているように見えますが、アプリケーションを閉じた後、ファイルが作成されていないようです。これにより、最初の例を使用してアプリケーションディレクトリが必要であると信じるようになります。問題は、単一のクラス内でアプリケーション コンテキストを取得する方法です。

4

3 に答える 3

1

問題は、単一のクラス内でアプリケーション コンテキストを取得する方法です。

Android ドキュメントから:

通常、Application をサブクラス化する必要はありません。ほとんどの場合、静的シングルトンは、よりモジュール化された方法で同じ機能を提供できます。シングルトンにグローバル コンテキストが必要な場合 (ブロードキャスト レシーバーを登録する場合など)、それを取得する関数に、シングルトンを最初に構築するときに Context.getApplicationContext() を内部的に使用する Context を指定できます。

次のようにシングルトンを作成します。

// ...
private Context mAppContext = null;
private static MySingleton mSingleton = null;
// ...

private MySingleton(Context context) {
    mAppContext = context;
    // ... other initialization
}

public static MySingleton get(Context context) {
    if (mSingleton == null) {
        /*
         * Get the global application context since this is an
         * application-wide singleton
         */
        mSingleton = new MySingleton(
                context.getApplicationContext());
    }
    return mSingleton;
}

アクティビティからシングルトンを取得するたびに、グローバル アプリケーション コンテキストにアクセスできます。

次のように、シングルトン内でファイルを作成するために使用できます。

public void createFile(String filename) {
    File file = new File(mAppContext.getFilesDir(), filename);
}

または、ここに記載されている他の方法を使用することもできます

于 2014-09-23T18:43:38.647 に答える
0

または、すでにシングルトンである Application クラスを拡張できます。それはかなり便利です:)

package com.example.myapp;

import android.app.Application;
import android.content.Context;

public class MyApp extends Application {
    private static Context context;
    private static MyApp my_instance;

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        my_instance = this;
        context = this;
    }

    public static synchronized MyApp getInstance() {
        return my_instance;
    }

    public static synchronized Context getContext() {
        return context;
    }
}
于 2014-09-23T18:52:57.093 に答える
0

方法:

new File("filename")

ディスク上にファイルを作成しません。

ファイルを作成するには、ファイルを開いて書き込む必要があります。または、

File.createNewFile

于 2014-09-23T18:56:40.073 に答える