2012-09-13 15 views
5

Tengo un problema al leer getSharedPreferences de la clase no activa para configurar la lista de reproducción en el reproductor ... En mi actividad tomo la variable de cadena de edittext para obtener la ruta de la carpeta para trabajar con archivos de audio ...Android no actividad getSharedPreferences

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(""); 
      } 
     } 
    }); 

Así, en la actividad que puedo cambiar y guardar el valor de la cadena en las preferencias compartidas ... Pero ho puedo hacerlo de la clase pública ...? Aprecie cualquier ejemplo ...

Respuesta

8

Una forma es utilizar Application objeto . Este es un truco sucio pero a veces útil.

En primer lugar se necesita un miembro estático en su clase de aplicación, por lo que:

public class MyApplication extends Application { 
    private static MyApplication instance; 

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

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

Desde objeto de aplicación se crea siempre antes de crear cualquier actividad y correr y se mantiene durante toda la vida aplicación siempre se puede estar seguro de que lo hará tener uno adecuado.

Luego en su código simplemente llame al MyApplication.getInstance() y tendrá un contexto de aplicación global.

Recuerde declarar MyApplication en manifiesto.

+0

Ok, he agregado MyApp para manifestar y como una clase con extends ... Ahora en mi clase he creado el constructor donde agregué AppApp.getInstance(); – timonvlad

+0

Pero todavía da nullpointexception ... ¿cuál es el problema? – timonvlad

+0

¿Puedes dar seguimiento de la pila? posiblemente en mi correo electrónico: cuando resolvamos su problema, podemos editar su pregunta o mi respuesta. He estado usando una solución como esta varias veces. –

0

add MainActivity.this. antes getSharedPreferences

+0

No funciona! !!! – timonvlad

1

que necesita para aprobar el contexto en el constructor de la clase y luego usar este contexto para realizar la lectura o escritura de preferencia similar presenten como

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

    Now use this context 
8

usted tiene que conseguir el contexto pasado a su método de clase:

MainActivity:

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()); 
    } 
} 

TestClass:

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(); 
    } 
} 

esperamos ayudar

Cuestiones relacionadas