2012-09-13 15 views
5

मुझे गैर-गतिविधि वर्ग से getSharedPreferences को प्लेयर में प्लेलिस्ट सेट करने के लिए एक समस्या है ... मेरी गतिविधि में मैं ऑडियो फ़ाइलों के साथ काम करने के लिए फ़ोल्डर का पथ प्राप्त करने के लिए edittext से स्ट्रिंग चर लेता हूं ...एंड्रॉइड गैर-गतिविधि 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(""); 
      } 
     } 
    }); 

तो, गतिविधि में मैं बदल सकते हैं और साझा वरीयताओं में स्ट्रिंग के मूल्य को बचाने ... लेकिन हो मैं सार्वजनिक वर्ग से यह कर सकते हैं ...? किसी भी उदाहरण की सराहना करें ...

उत्तर

8

एक ही रास्ता के रूप में Application वस्तु का उपयोग करने के लिए है शेयर वरीयता के आपरेशन लिखने के लिए की जरूरत है । यह एक गंदे हैक है लेकिन कम कभी-कभी सहायक नहीं होता है।

पहले तुम तो अपने आवेदन कक्षा में एक स्थिर सदस्य की जरूरत है,:

public class MyApplication extends Application { 
    private static MyApplication instance; 

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

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

के बाद से आवेदन वस्तु हमेशा से पहले किसी भी गतिविधि बनाया है और चलाया जाता है बन जाता है और आवेदन जीवन भर रखा जाता है तो आप हमेशा यकीन है कि हो सकता है आप करेंगे उचित है

फिर अपने कोड में बस MyApplication.getInstance() पर कॉल करें और आपके पास वैश्विक ऐप संदर्भ होगा।

मैनिफेस्ट में MyApplication घोषित करना याद रखें।

+0

ठीक है, मैंने प्रकट करने के लिए MyApp को जोड़ा है और विस्तार के साथ एक वर्ग के रूप में ... अब मेरी कक्षा में मैंने कन्स्ट्रक्टर बनाया है जहां AppApp.getInstance() जोड़ा गया है; – timonvlad

+0

लेकिन यह अभी भी nullpointexception देता है .... समस्या क्या है? – timonvlad

+0

क्या आप स्टैक ट्रेस दे सकते हैं? संभवतः मेरे ईमेल पर - जब हम आपकी समस्या का समाधान करते हैं तो हम आपके प्रश्न या मेरे उत्तर को संपादित कर सकते हैं। मैं इस तरह के समाधान का उपयोग कर रहा हूं। –

0

मुख्य गतिविधि जोड़ें। यह। पहले getSharedPreferences

+0

यह काम नहीं करता है! !!! – timonvlad

1

आप वर्ग के निर्माता में संदर्भ गुजरती हैं और फिर इस संदर्भ का उपयोग पढ़ा करते हैं या जैसे

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

    Now use this context 
8

आप संदर्भ अपनी कक्षा विधि के लिए पारित करने के लिए है:

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

आशा में मदद करने के

संबंधित मुद्दे