2011-06-02 7 views
7

Uygulamamdaki izinlerle ilgili bir sorunum var. Uygulamamın depolama alanında dosya oluşturma izinlerine sahip olmadığı anlaşılıyor.Android openFileOutput - depolama alanı oluşturulmasına izin yok

String FILENAME = "hello_file"; 
String string = "hello world!"; 
FileOutputStream fos; 

try 
{ 
    fos = getApplicationContext() 
      .openFileOutput(FILENAME, Context.MODE_PRIVATE);  
    fos.write(string.getBytes()); 
    fos.close(); 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 
benim ana sınıfı onCreate işleyicisi olarak

ve her zaman olsun: yanıtta

06-02 13:23:52.996: WARN/ApplicationContext(6278): Unable to create files directory 
06-02 13:23:54.203: WARN/System.err(6278): java.lang.NullPointerException 
06-02 13:23:54.226: WARN/System.err(6278):  at android.app.ContextImpl.openFileOutput(ContextImpl.java:464) 
06-02 13:23:54.234: WARN/ActivityManager(2470): Activity idle timeout for HistoryRecord{485ebe10 com.servision.svclient/.Main} 
06-02 13:23:54.257: WARN/System.err(6278):  at android.content.ContextWrapper.openFileOutput(ContextWrapper.java:158) 
06-02 13:23:54.273: WARN/System.err(6278):  at com.servision.svclient.Main.onCreate(Main.java:59) 
06-02 13:23:54.277: WARN/System.err(6278):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
06-02 13:23:54.285: WARN/System.err(6278):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
06-02 13:23:54.293: WARN/System.err(6278):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
06-02 13:23:54.296: WARN/System.err(6278):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
06-02 13:23:54.304: WARN/System.err(6278):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
06-02 13:23:54.312: WARN/System.err(6278):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-02 13:23:54.320: WARN/System.err(6278):  at android.os.Looper.loop(Looper.java:123) 
06-02 13:23:54.324: WARN/System.err(6278):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
06-02 13:23:54.332: WARN/System.err(6278):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-02 13:23:54.336: WARN/System.err(6278):  at java.lang.reflect.Method.invoke(Method.java:521) 
06-02 13:23:54.343: WARN/System.err(6278):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
06-02 13:23:54.355: WARN/System.err(6278):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
06-02 13:23:54.359: WARN/System.err(6278):  at dalvik.system.NativeStart.main(Native Method) 

.

Projemin tanımlarında çok basit bir şey olduğuna inanıyorum. Ama ne olduğunu anlayamıyorum. Başka bir proje oluşturur ve buna aynı kodu koyarsanız

, iyi çalışıyor.

benim bildirim dosyası şöyle görünür:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.servision.svclient" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> 


    <application android:icon="@drawable/main" android:label="@string/app_name" android:debuggable="true"> 
    <activity android:name=".Main" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar"> 
     <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".StreamActivity" android:label="@string/app_name"/>   
    <activity android:name=".MainActivity"/> 
    <activity android:name=".GatewayList"/> 
    <activity android:name=".StatisticsActivity"/> 
    <activity android:name=".SettingsActivity"/> 
    <activity android:name=".MapsActivity"/> 
    <activity android:name=".AboutActivity"/> 
    </application> 
    <uses-sdk android:minSdkVersion="8" /> 


</manifest> 
+1

Main.java –

+0

59 Gerçekten dahili depolama izni ihtiyacı olduğunu sanmıyorum kolunuz nedir. Gönderilen yığın izi dolu mu? ya da satırları atlıyorsunuz. – doNotCheckMyBlog

+1

android.permission.WRITE_INTERNAL_STORAGE –

cevap

0

dahili depolama alanına kesinlikle erişen dosya mı? WRITE_EXTERNAL_STORAGE iznini bildirmediniz. FILENAME değeri nedir: Sen

+1

gibi bir iz yok, evet, yol yok, bu yüzden dahili depolamada oluşturulacağını varsayalım ve WRITE_EXTERNAL_STORAGE eklediğim halde, yine de bu problemi çözdüm – AlexS

+0

Tüm uygulama klasörünü cihazdan el ile kaldırarak. – AlexS

+0

openFileOutput(), ** dahili ** depolama biriminde bir yol döndürür. –

0

Sizin FILENAME değişken yanlış bu Sd karta yazmaya gerekir? bir girişim, bir dosya openFileOutput içine boş değer daki DOSYAADı değişken sonuçlar kapalı tabanlı üretmek için çünkü

O hata oluşur. Yani FILENAME geçerli bir dosya üretmiyor.

+1

değeri "file_ouput" dosyasıdır, ancak kodlanmış dizgeye değiştirirsem "test" deyiniz, farketmez, yine de başarısız olur. – AlexS

+1

Tüm uygulama klasörünü aygıttan el ile kaldırarak bu sorunu çözdüm. – AlexS

+0

Ah, imzalama sertifikasını değiştirdiniz mi? Uygulamayı farklı bir sertifikayla imzalarsanız (örneğin, hata ayıklama sertifikanız sona eriyorsa ve siz yeni bir tane oluşturuyorsanız veya bir sürüm sertifikası kullanıyorsanız), temel dizindeki sahiplik değişecektir. Boş gösterici, garip bir hatadır ... – Femi

3

Cihaz yönetimi => Cihaz üzerinde sağ tıklayın => Kaldır App => Yeniden çalışma.

+1

sorusunu kaldırmak için kabul edin, bu fikir biraz rasgele olabilir, bu iyi bir fikirdir."Dosya dizini oluşturulamıyor", muhtemelen, yüklü uygulamaların aygıt kataloğunun kendisiyle tutarsız hale gelmesinden kaynaklanan sistem düzeyinde bir hatadır, bu nedenle ** uygulamanın kaldırılması ve yeniden yüklenmesi ** gerçekten de en uygun eylemi olabilir. En azından sorun uygulamanın kendisinin kodunda olduğu gibi görünmüyor. –