6

非ActivityクラスからgetSharedPreferencesを読み取ってプレーヤーにプレイリストを設定すると問題が発生します...私のアクティビティでは、edittextから文字列変数を取得して、オーディオファイルを操作するフォルダーのパスを取得します...

    public class MainActivity extends Activity {


String ppp;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 
    String PATH = getSharedPreferences("PATH", MODE_PRIVATE).getString("path", ppp);
    if (PATH == null){
        ..........
            ...........
        path_tv.setText("folder is undefined");
    }
    else {
        path_tv.setText("folder defined: /mnt/sdcard/" + PATH);
    }
    set_path.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (path_edit.getText().toString().length() == 0){
                Toast.makeText(getBaseContext(), "folder is undefined", Toast.LENGTH_SHORT).show();
            }
            else {
            ppp = path_edit.getText().toString();
            getSharedPreferences("PATH", MODE_PRIVATE)
            .edit()
            .putString("path", ppp)
            .commit();
            File folder = new File(Environment.getExternalStorageDirectory() + "/" + ppp);
            boolean success = false;
            if (!folder.exists()) {
                success = folder.mkdir();
                if (success) Toast.makeText(getBaseContext(), ".....", Toast.LENGTH_SHORT).show();
            }
            String PATH = getSharedPreferences("PATH", MODE_PRIVATE).getString("path", ppp);
            path_tv.setText("........ /mnt/sdcard/" + PATH);
            path_edit.setText("");
            }
        }
    });

したがって、アクティビティでは、共有設定で文字列の値を変更して保存できます...しかし、パブリッククラスからそれを行うことができますか...? どんな例でも感謝します...

4

4 に答える 4

11

1 つの方法は、Applicationオブジェクトを使用することです。これは汚いハックですが、それでも時々役立つことがあります。

まず、Application クラスに静的メンバーが必要です。

public class MyApplication extends Application {
    private static MyApplication instance;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }

    public static MyApplication getInstance() {
        return instance;
    }
}

Application オブジェクトは、アクティビティが作成および実行される前に常に作成され、アプリケーションの有効期間全体にわたって保持されるため、常に適切なものを確実に取得できます。

次に、コードで呼び出すだけで、MyApplication.getInstance()グローバル アプリ コンテキストが作成されます。

MyApplicationマニフェストで宣言することを忘れないでください。

于 2012-09-13T12:06:27.917 に答える
9

クラス メソッドに渡されるコンテキストを取得する必要があります。

主な活動:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Test t = new Test("Show Preference: ");
        getSharedPreferences("PATH", MODE_PRIVATE)
        .edit()
        .putString("p", "preference")
        .commit();
        t.showToast(this.getApplicationContext());
    }
}

テストクラス:

public class Test {
    private String s;

    public Test(String s){
        this.s = s;
    }

    public void showToast (Context c){
        String pref = c.getSharedPreferences("PATH", Context.MODE_PRIVATE).getString("p", "Error");
        Toast.makeText(c.getApplicationContext(), s + pref, Toast.LENGTH_LONG).show();
    }
}

お役に立てれば幸いです

于 2012-09-13T12:16:27.120 に答える
1

クラスのコンストラクターでコンテキストを渡し、このコンテキストを使用して共有設定の読み取りまたは書き込み操作を実行する必要があります。

           public class xyx{
            public  xyx(Context context){
             this.context= context
             }

     Now use this context 
于 2012-09-13T12:02:39.107 に答える
0

MainActivity.this を追加します。getSharedPreferences の前に

于 2012-09-13T12:02:30.040 に答える