2014-07-18 14 views
5

मैं इस के लिए sdcard या बाहरी sdcard में डेटाबेस बनाने के लिए चाहते हैं मैं इस कोड की कोशिश करते हैं और इस मैं सफलतापूर्वक sdcard में डेटाबेस बनाया है लेकिन logcat में यह मुझे नीचेchmod विफल: एंड्रॉइड में EPERM (ऑपरेशन की अनुमति नहीं है)?

तरह की चेतावनी Logcat

देने का उपयोग कर

07-18 14: 18: 22.140: डब्ल्यू/FileUtils (8595): libcore.io.ErrnoException:: chmod विफल रहा: EPERM (कार्रवाई की अनुमति नहीं)

chmod (/ mnt/sdcard/peakmedia/DB_PMD) करने में विफल

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

      } 
    } 
} 

उत्तर

-1

आप इस फ़ोल्डर का स्वामी (chown) बदलना होगा। वर्तमान में ऐप/आप उस फ़ोल्डर के स्वामी नहीं हैं जहां आप डीबी स्थापित करना चाहते हैं।

तो तुम जैसे

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

कल मैं महेश की तरह एक ही समस्या से मुलाकात की कुछ करने के लिए (दिखाई ही चेतावनी दी है संदेश, SQLite के लिए एसक्यूएल सर्वर से डेटा डालें, 2 टेबल SQLite में डेटा प्राप्त करने वाले, लेकिन केवल 1 तालिका डेटा प्राप्त हुआ, एक और तालिका खाली है)।

लेकिन आज मैं एसडी कार्ड में एसक्यूएलसाइट के 2 टेबल में SQL सर्वर से डेटा डालने का प्रयास करता हूं, इस बार, 2 तालिका डेटा प्राप्त हुआ।

एकमात्र अंतर EMULATOR सेटिंग है।

कुछ एमबी से 8 जीबी, संदर्भ चित्र एसडी कार्ड स्पेस सेटिंग बढ़ाएं। emulator setting photo

हालांकि चेतावनी भी दिखाई देती है, लेकिन कार्य सफलता को सम्मिलित करती है।

3

बस इस समस्या को हल किया।

आपको अपने ऐप को सिस्टम अनुमति देने के लिए लिनक्स बिल्ड में शामिल होने देना है।

  1. एंड्रॉइड में यह लाइन जोड़ें।mk

    LOCAL_CERTIFICATE := platform

  2. AndroidManifest.xml

    android:sharedUserId="android.uid.system"

  3. के प्रकट नोड में इस ऐड

    apk उत्पन्न और में/system/app धक्का/

  4. अब आप चलाने का प्रयास कर सकते हैं

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

    या

    परिणाम की
    File file = new File("/data/ena"); 
    if (file.exists()) { 
        boolean result = file.setExecutable(true); 
        Log.e(TAG, "trpb67, RESULT IS " + result); 
    } 
    

    मान हमेशा सही होना चाहिए

0

चेक अपने डिवाइस MTP USB मोड में जुड़ा हुआ है या नहीं। कभी-कभी एमटीपी मोड का पिछला कनेक्शन इस समस्या का कारण बन सकता है। बस डिवाइस को पुनरारंभ करें और जांचें कि यह काम करता है या नहीं।

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