2014-07-18 11 views
5

ich will i Datenbank in diesen Code versuchen, und dies habe ich Datenbank erfolgreich erstellt in sdcard verwenden, haben für diese sdcard oder externe SD-Karte schaffen, sondern in logcat Warnung es mir wie untenchmod fehlgeschlagen: EPERM (Operation nicht erlaubt) in Android?

Logcat

07-18 14: 18: 22.140: W/FileUtils (8595): Fehler beim chmod (/ mnt/sdcard/peakmedia/DB_PMD): libcore.io.ErrnoException: chmod fehlgeschlagen: EPERM (Operation nicht zulässig)

DB_Helper.java

public class DB_Helper extends SQLiteOpenHelper 
{ 

    public DB_Helper(Context context) 
    { 
     super(context, Environment.getExternalStorageDirectory().getAbsolutePath() 
         + File.separator + DB_Constant.DB.FILE_DIR 
         + File.separator + DB_Constant.DB.DATABASENAME, null, DB_Constant.DB.DB_VERSION); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
     String query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYFILES_TABLE); 
     db.execSQL(query); 


     query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYUSERS_TABLE); 
     db.execSQL(query); 

     query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYPLAYLIST_TABLE); 
     db.execSQL(query); 

     query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYDEVICE_TABLE); 
     db.execSQL(query); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
      if(newVersion > oldVersion) 
      { 

       db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYFILES); 
       onCreate(db); 

       db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYUSERS); 
       onCreate(db); 

       db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYPLAYLIST); 
       onCreate(db); 

       db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYDEVICE); 
       onCreate(db); 

      } 
    } 
} 

Antwort

-1

Sie haben die Besitzer (chown) dieses Ordners zu ändern. Derzeit ist die App/Sie nicht der Besitzer des Ordners, in dem Sie die Datenbank installieren möchten.

So haben Sie so etwas wie

sudo chown -R theuser /mnt/sdcard/peakmedia/DB_PMD 
0

Gestern traf ich gleiches Problem wie Mahesh zu tun (erscheinen gleiche Meldung warnen, legen Sie Daten von SQL Server zu SQLite, 2 Tabellen sollten Daten in SQLite erhalten, aber nur 1 Tabelle empfangene Daten, eine andere Tabelle ist leer).

Aber heute versuche ich Daten aus SQL Server in 2 Tabellen von SQLite in SD-Karte wieder einfügen, dieses Mal, 2 Tabelle Daten empfangen.

Der einzige Unterschied ist die EMULATOR-Einstellung.

SD-Kartenplatzierung vergrößern, von wenigen MB auf 8 GB, Referenzbild. emulator setting photo

Obwohl Warnung auch erscheinen, aber Einfügen Arbeitserfolg.

3

Gerade hat dieses Problem gelöst.

Sie müssen Ihre App dem Linux-Build beitreten lassen, um ihr die Berechtigung SYSTEM zu erteilen.

  1. diese Zeile in Android hinzufügen.mk

    LOCAL_CERTIFICATE := platform

  2. dies in manifeste Knoten AndroidManifest.xml

    android:sharedUserId="android.uid.system"

  3. generieren apk hinzufügen und drücken Sie sie in/system/app/

  4. Jetzt können Sie versuchen zu laufen

    final String command = "chmod 777 /data/ena"; 
    Process p = Runtime.getRuntime().exec(command); 
    

    oder

    File file = new File("/data/ena"); 
    if (file.exists()) { 
        boolean result = file.setExecutable(true); 
        Log.e(TAG, "trpb67, RESULT IS " + result); 
    } 
    

    Wert Ergebnis sollte wahr sein

0

Überprüfen Sie, ob Ihr Gerät in MTP USB-Modus geschaltet ist. Manchmal kann eine vorherige Verbindung des MTP-Modus dieses Problem verursachen. Starten Sie das Gerät einfach neu und prüfen Sie, ob es funktioniert.

Verwandte Themen