2010-09-02 17 views
24

मैं openFileOutput फ़ंक्शन का उपयोग करने का प्रयास कर रहा हूं लेकिन यह संकलित नहीं करना चाहता ... फ़ंक्शन को पहचान नहीं लेता है। मैं एंड्रॉइड एसडीके 1.6 का उपयोग कर। क्या यह एक एसडीके समस्या है? क्या यह एक पैरामीटर समस्या है?एंड्रॉइड openFileOutput के साथ क्या गलत है?

import java.io.FileOutputStream; 
public static void save(String filename, MyObjectClassArray[] theObjectAr) { 
     FileOutputStream fos; 
     try { 
      fos = openFileOutput(filename, Context.MODE_PRIVATE); 


      ObjectOutputStream oos = new ObjectOutputStream(fos); 
      oos.writeObject(theObjectAr); 
      oos.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } 
    } 

उत्तर

48

आपकी विधि निम्नानुसार होनी चाहिए। एक पैरामीटर के रूप में एक अतिरिक्त संदर्भ में लेता है। इस विधि के लिए आपको अपने सेवा या गतिविधि

public static void save(String filename, MyObjectClassArray[] theObjectAr, 
    Context ctx) { 
     FileOutputStream fos; 
     try { 
      fos = ctx.openFileOutput(filename, Context.MODE_PRIVATE); 


      ObjectOutputStream oos = new ObjectOutputStream(fos); 
      oos.writeObject(theObjectAr); 
      oos.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } 
    } 
+0

धन्यवाद, यह है। – Fabien

+0

मैं इसे काम पर नहीं मिला। मैंने यहां एक संदर्भित संदर्भ की कोशिश की, 'context.getAplicationContext() ',' application.instance() 'और' application.instance()। Ctx के लिए getAplicationContext() 'और यह हमेशा FileNotFoundException फेंकता है। –

+2

बाहर निकलता है, मुझे अनुमति समस्या थी। निश्चित रूप से यह स्पष्ट नहीं है कि "अनुमति अस्वीकृत" समस्या का परिणाम 'FileNotFoundException' में होता है। –

4

आप स्थैतिक संदर्भ से गैर स्थैतिक विधि का आह्वान करने का प्रयास कर रहे हैं (आपकी विधि में स्थिर संशोधक है)। आपको या तो अपनी विधि को गैर स्थैतिक होने या संदर्भ के उदाहरण (अधिकांश मामलों में गतिविधि उदाहरण) में पास करना होगा और ऑब्जेक्ट पर विधि का आह्वान करना होगा।

+0

धन्यवाद मैं भी इस समस्या को पता चला:

java.lang.IllegalArgumentException: File /storage/sdcard0/path/to/file.txt contains a path separator 

इस आप एक फ़ाइल वस्तु बनाने के लिए और सिर्फ इस तरह इसे बनाने की जरूरत है ठीक करने के लिए: यह इस अपवाद का कारण बनता है। :) – Fabien

1

इसके अलावा, आप openOutputStream पथ पर अग्रसर नहीं कर सकते हैं पारित कर सकते हैं।

String filename = "/sdcard/path/to/file.txt"; 
File sdCard = Environment.getExternalStorageDirectory(); 
filename = filename.replace("/sdcard", sdCard.getAbsolutePath()); 
File tempFile = new File(filename); 
try 
{ 
    FileOutputStream fOut = new FileOutputStream(tempFile); 
    // fOut.write(); 
    // fOut.getChannel(); 
    // etc... 
    fOut.close(); 
}catch (Exception e) 
{ 
    Log.w(TAG, "FileOutputStream exception: - " + e.toString()); 
} 
संबंधित मुद्दे