æ°æ®åå¨å¨å¼åä¸æ¯ä½¿ç¨æé¢ç¹çï¼Androidå¹³å°ä¸»è¦æ5ç§å®ç°æ°æ®åå¨çæ¹å¼ã
第1ç§ï¼ 使ç¨SharedPreferencesåå¨æ°æ®
SharedPreferencesæ¯Androidå¹³å°ä¸ä¸ä¸ªè½»é级çåå¨ç±»ï¼ä¸»è¦æ¯ä¿åä¸äºå¸¸ç¨çé
ç½®æ¯å¦çªå£ç¶æï¼ä¸è¬å¨Activityä¸ éè½½çªå£ç¶æonSaveInstanceStateä¿åä¸è¬ä½¿ç¨SharedPreferenceså®æï¼å®æä¾äºAndroidå¹³å°å¸¸è§çLongé¿ æ´å½¢ãIntæ´å½¢ãStringå符串åçä¿åã
å®çæ¬è´¨æ¯åºäºXMLæ件åå¨key-valueé®å¼å¯¹æ°æ®ï¼é常ç¨æ¥åå¨ä¸äºç®åçé
置信æ¯ã
å
¶åå¨ä½ç½®å¨/data/data/<å
å>/shared_prefsç®å½ä¸ã
SharedPreferences对象æ¬èº«åªè½è·åæ°æ®èä¸æ¯æåå¨åä¿®æ¹ï¼åå¨ä¿®æ¹æ¯éè¿Editor对象å®ç°ã
å®ç°SharedPreferencesåå¨çæ¥éª¤å¦ä¸ï¼
ä¸ãæ ¹æ®Contextè·åSharedPreferences对象
äºãå©ç¨edit()æ¹æ³è·åEditor对象ã
ä¸ãéè¿Editor对象åå¨key-valueé®å¼å¯¹æ°æ®ã
åãéè¿commit()æ¹æ³æ交æ°æ®ã
SharedPreferences对象ä¸SQLiteæ°æ®åºç¸æ¯ï¼å
å»äºå建æ°æ®åºï¼å建表ï¼åSQLè¯å¥ç诸å¤æä½ï¼ç¸å¯¹èè¨æ´å æ¹ä¾¿ï¼ç®æ´ãä½æ¯SharedPreferencesä¹æå
¶èªèº«ç¼ºé·ï¼æ¯å¦å
¶èè½åå¨booleanï¼intï¼floatï¼longåStringäºç§ç®åçæ°æ®ç±»åï¼æ¯å¦å
¶æ æ³è¿è¡æ¡ä»¶æ¥è¯¢çãæ以ä¸è®ºSharedPreferencesçæ°æ®åå¨æä½æ¯å¦ä½ç®åï¼å®ä¹åªè½æ¯åå¨æ¹å¼çä¸ç§è¡¥å
ï¼èæ æ³å®å
¨æ¿ä»£å¦SQLiteæ°æ®åºè¿æ ·çå
¶ä»æ°æ®åå¨æ¹å¼ã
第2ç§ï¼ å
é¨æ件åå¨æ°æ®
å
³äºæ件åå¨ï¼Activityæä¾äºopenFileOutput()æ¹æ³å¯ä»¥ç¨äºææ°æ®è¾åºå°æ件ä¸ï¼å
·ä½çå®ç°è¿ç¨ä¸å¨J2SEç¯å¢ä¸ä¿åæ°æ®å°æ件ä¸æ¯ä¸æ ·çã
æ件å¯ç¨æ¥åæ¾å¤§éæ°æ®ï¼å¦ææ¬ãå¾çãé³é¢çã
é»è®¤ä½ç½®ï¼/data/data/<å
>/files/***.***ã
openFileOutput()æ¹æ³ç第ä¸åæ°ç¨äºæå®æ件å称ï¼ä¸è½å
å«è·¯å¾åé符â/â ï¼å¦ææ件ä¸åå¨ï¼Android ä¼èªå¨å建å®ã
å建çæ件ä¿åå¨/data/data//filesç®å½ï¼å¦ï¼ /data/data/cn.itcast.action/files/itcast.txt ï¼éè¿ç¹å»EclipseèåâWindowâ-âShow Viewâ-âOtherâï¼å¨å¯¹è¯çªå£ä¸å±å¼androidæ件夹ï¼éæ©ä¸é¢çFile Explorerè§å¾ï¼ç¶åå¨File Explorerè§å¾ä¸å±å¼/data/data//filesç®å½å°±å¯ä»¥çå°è¯¥æ件ã
openFileOutput()æ¹æ³ç第äºåæ°ç¨äºæå®æä½æ¨¡å¼ï¼æåç§æ¨¡å¼ï¼åå«ä¸ºï¼
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
Context.MODE_PRIVATEï¼ä¸ºé»è®¤æä½æ¨¡å¼ï¼ä»£è¡¨è¯¥æ件æ¯ç§ææ°æ®ï¼åªè½è¢«åºç¨æ¬èº«è®¿é®ï¼å¨è¯¥æ¨¡å¼ä¸ï¼åå
¥çå
容ä¼è¦çåæ件çå
容ï¼å¦ææ³ææ°åå
¥çå
容追å å°åæ件ä¸ãå¯ä»¥ä½¿ç¨Context.MODE_APPEND
Context.MODE_APPENDï¼æ¨¡å¼ä¼æ£æ¥æ件æ¯å¦åå¨ï¼åå¨å°±å¾æ件追å å
容ï¼å¦åå°±å建æ°æ件ã
Context.MODE_WORLD_READABLEåContext.MODE_WORLD_WRITEABLEç¨æ¥æ§å¶å
¶ä»åºç¨æ¯å¦ææé读å该æ件ã
MODE_WORLD_READABLEï¼è¡¨ç¤ºå½åæ件å¯ä»¥è¢«å
¶ä»åºç¨è¯»åï¼
MODE_WORLD_WRITEABLEï¼è¡¨ç¤ºå½åæ件å¯ä»¥è¢«å
¶ä»åºç¨åå
¥ã
å¦æå¸ææ件被å
¶ä»åºç¨è¯»ååï¼å¯ä»¥ä¼ å
¥ï¼ openFileOutput(âitcast.txtâ, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); androidæä¸å¥èªå·±çå®å
¨æ¨¡åï¼å½åºç¨ç¨åº(.apk)å¨å®è£
æ¶ç³»ç»å°±ä¼åé
ç»ä»ä¸ä¸ªuseridï¼å½è¯¥åºç¨è¦å»è®¿é®å
¶ä»èµæºæ¯å¦æ件çæ¶åï¼å°±éè¦useridå¹é
ãé»è®¤æ
åµä¸ï¼ä»»ä½åºç¨å建çæ件ï¼sharedpreferencesï¼æ°æ®åºé½åºè¯¥æ¯ç§æçï¼ä½äº/data/data//filesï¼ï¼å
¶ä»ç¨åºæ æ³è®¿é®ã
é¤éå¨å建æ¶æå®äºContext.MODE_WORLD_READABLEæè
Context.MODE_WORLD_WRITEABLE ï¼åªæè¿æ ·å
¶ä»ç¨åºæè½æ£ç¡®è®¿é®ã 对äºç§ææ件åªè½è¢«å建该æ件çåºç¨è®¿é®ï¼å¦æå¸ææ件è½è¢«å
¶ä»åºç¨è¯»ååï¼å¯ä»¥å¨å建æ件æ¶ï¼æå®Context.MODE_WORLD_READABLEåContext.MODE_WORLD_WRITEABLEæéã
Activityè¿æä¾äºgetCacheDir()ågetFilesDir()æ¹æ³ï¼ getCacheDir()æ¹æ³ç¨äºè·å/data/data//cacheç®å½ getFilesDir()æ¹æ³ç¨äºè·å/data/data//filesç®å½ã
第3ç§ï¼ å¤é¨æ件åå¨æ°æ®
ææ件åå
¥SDCardï¼
使ç¨ActivityçopenFileOutput()æ¹æ³ä¿åæ件ï¼æ件æ¯åæ¾å¨ææºç©ºé´ä¸ï¼ä¸è¬ææºçåå¨ç©ºé´ä¸æ¯å¾å¤§ï¼åæ¾äºå°æ件è¿è¡ï¼å¦æè¦åæ¾åè§é¢è¿æ ·ç大æ件ï¼æ¯ä¸å¯è¡çã对äºåè§é¢è¿æ ·ç大æ件ï¼æ们å¯ä»¥æå®åæ¾å¨SDCardã
SDCardæ¯å¹²ä»ä¹çï¼ä½ å¯ä»¥æå®çä½æ¯ç§»å¨ç¡¬çæUçã å¨æ¨¡æå¨ä¸ä½¿ç¨SDCardï¼ä½ éè¦å
å建ä¸å¼ SDCardå¡ï¼å½ç¶ä¸æ¯ççSDCardï¼åªæ¯éåæ件ï¼ã
å建SDCardå¯ä»¥å¨Eclipseå建模æå¨æ¶éåå建ï¼ä¹å¯ä»¥ä½¿ç¨DOSå½ä»¤è¿è¡å建ï¼å¦ä¸ï¼ å¨Dosçªå£ä¸è¿å
¥android SDKå®è£
è·¯å¾çtoolsç®å½ï¼è¾å
¥ä»¥ä¸å½ä»¤å建ä¸å¼ 容é为2GçSDCardï¼æ件åç¼å¯ä»¥é便åï¼å»ºè®®ä½¿ç¨.imgï¼ mksdcard 2048M D:\AndroidTool\sdcard.img å¨ç¨åºä¸è®¿é®SDCardï¼ä½ éè¦ç³è¯·è®¿é®SDCardçæéã
å¨AndroidManifest.xmlä¸å å
¥è®¿é®SDCardçæéå¦ä¸:
è¦å¾SDCardåæ¾æ件ï¼ç¨åºå¿
é¡»å
å¤æææºæ¯å¦è£
æSDCardï¼å¹¶ä¸å¯ä»¥è¿è¡è¯»åã
注æï¼è®¿é®SDCardå¿
é¡»å¨AndroidManifest.xmlä¸å å
¥è®¿é®SDCardçæéã
Environment.getExternalStorageState()æ¹æ³ç¨äºè·åSDCardçç¶æï¼å¦æææºè£
æSDCardï¼å¹¶ä¸å¯ä»¥è¿è¡è¯»åï¼é£ä¹æ¹æ³è¿åçç¶æçäºEnvironment.MEDIA_MOUNTEDã
Environment.getExternalStorageDirectory()æ¹æ³ç¨äºè·åSDCardçç®å½ï¼å½ç¶è¦è·åSDCardçç®å½ï¼ä½ ä¹å¯ä»¥è¿æ ·åï¼
第4ç§ï¼ SQLiteæ°æ®åºåå¨æ°æ®
SQLiteæ¯è½»é级åµå
¥å¼æ°æ®åºå¼æï¼å®æ¯æ SQL è¯è¨ï¼å¹¶ä¸åªå©ç¨å¾å°çå
åå°±æå¾å¥½çæ§è½ãæ¤å¤å®è¿æ¯å¼æºçï¼ä»»ä½äººé½å¯ä»¥ä½¿ç¨å®ã许å¤å¼æºé¡¹ç®ï¼(Mozilla, PHP, Pythonï¼é½ä½¿ç¨äº SQLite.SQLite ç±ä»¥ä¸å 个ç»ä»¶ç»æï¼SQL ç¼è¯å¨ãå
æ ¸ãå端以åé件ãSQLite éè¿å©ç¨èææºåèææ°æ®åºå¼æï¼VDBEï¼ï¼ä½¿è°è¯ãä¿®æ¹åæ©å± SQLite çå
æ ¸åå¾æ´å æ¹ä¾¿ã
ç¹ç¹ï¼
é¢åèµæºæéç设å¤ï¼
没ææå¡å¨è¿ç¨,
æææ°æ®åæ¾å¨åä¸æ件ä¸è·¨å¹³å°ï¼
å¯èªç±å¤å¶ã
SQLite åºæ¬ä¸ç¬¦å SQL-92 æ åï¼åå
¶ä»çä¸»è¦ SQL æ°æ®åºæ²¡ä»ä¹åºå«ãå®çä¼ç¹å°±æ¯é«æï¼Android è¿è¡æ¶ç¯å¢å
å«äºå®æ´ç SQLiteã
SQLite åå
¶ä»æ°æ®åºæ大çä¸åå°±æ¯å¯¹æ°æ®ç±»åçæ¯æï¼å建ä¸ä¸ªè¡¨æ¶ï¼å¯ä»¥å¨ CREATE TABLE è¯å¥ä¸æå®æåçæ°æ®ç±»åï¼ä½æ¯ä½ å¯ä»¥æä»»ä½æ°æ®ç±»åæ¾å
¥ä»»ä½åä¸ãå½æ个å¼æå
¥æ°æ®åºæ¶ï¼SQLite å°æ£æ¥å®çç±»åãå¦æ该类åä¸å
³èçåä¸å¹é
ï¼å SQLite ä¼å°è¯å°è¯¥å¼è½¬æ¢æ该åçç±»åãå¦æä¸è½è½¬æ¢ï¼å该å¼å°ä½ä¸ºå
¶æ¬èº«å
·æçç±»ååå¨ãæ¯å¦å¯ä»¥æä¸ä¸ªå符串ï¼Stringï¼æ¾å
¥ INTEGER åãSQLite 称è¿ä¸ºâ弱类åâï¼manifest typing.ï¼ã æ¤å¤ï¼SQLite ä¸æ¯æä¸äºæ åç SQL åè½ï¼ç¹å«æ¯å¤é®çº¦æï¼FOREIGN KEY constrainsï¼ï¼åµå¥ transcaction å RIGHT OUTER JOIN å FULL OUTER JOIN, è¿æä¸äº ALTER TABLE åè½ã é¤äºä¸è¿°åè½å¤ï¼SQLite æ¯ä¸ä¸ªå®æ´ç SQL ç³»ç»ï¼æ¥æå®æ´ç触åå¨ï¼äº¤æççã
Android éæäº SQLite æ°æ®åº Android å¨è¿è¡æ¶ï¼run-timeï¼éæäº SQLiteï¼æ以æ¯ä¸ª Android åºç¨ç¨åºé½å¯ä»¥ä½¿ç¨ SQLite æ°æ®åºã
对äºçæ SQL çå¼å人åæ¥æ¶ï¼å¨ Android å¼åä¸ä½¿ç¨ SQLite ç¸å½ç®åãä½æ¯ï¼ç±äº JDBC ä¼æ¶è太å¤çç³»ç»èµæºï¼æ以 JDBC 对äºææºè¿ç§å
ååé设å¤æ¥è¯´å¹¶ä¸åéãå æ¤ï¼Android æä¾äºä¸äºæ°ç API æ¥ä½¿ç¨ SQLite æ°æ®åºï¼Android å¼åä¸ï¼ç¨åºåéè¦å¦ä½¿ç¨è¿äº APIã
æ°æ®åºåå¨å¨ data/< 项ç®æ件夹 >/databases/ ä¸ã Android å¼åä¸ä½¿ç¨ SQLite æ°æ®åº Activites å¯ä»¥éè¿ Content Provider æè
Service 访é®ä¸ä¸ªæ°æ®åºã
å建æ°æ®åº Android ä¸èªå¨æä¾æ°æ®åºãå¨ Android åºç¨ç¨åºä¸ä½¿ç¨ SQLiteï¼å¿
é¡»èªå·±å建æ°æ®åºï¼ç¶åå建表ãç´¢å¼ï¼å¡«å
æ°æ®ã
Android æä¾äº SQLiteOpenHelper 帮å©ä½ å建ä¸ä¸ªæ°æ®åºï¼ä½ åªè¦ç»§æ¿ SQLiteOpenHelper ç±»ï¼å°±å¯ä»¥è½»æ¾çå建æ°æ®åºãSQLiteOpenHelper ç±»æ ¹æ®å¼ååºç¨ç¨åºçéè¦ï¼å°è£
äºå建åæ´æ°æ°æ®åºä½¿ç¨çé»è¾ã
SQLiteOpenHelper çåç±»ï¼è³å°éè¦å®ç°ä¸ä¸ªæ¹æ³ï¼
1 æé å½æ°ï¼è°ç¨ç¶ç±» SQLiteOpenHelper çæé å½æ°ãè¿ä¸ªæ¹æ³éè¦å个åæ°ï¼ä¸ä¸æç¯å¢ï¼ä¾å¦ï¼ä¸ä¸ª Activityï¼ï¼æ°æ®åºååï¼ä¸ä¸ªå¯éç游æ å·¥åï¼éå¸¸æ¯ Nullï¼ï¼ä¸ä¸ªä»£è¡¨ä½ æ£å¨ä½¿ç¨çæ°æ®åºæ¨¡åçæ¬çæ´æ°ã
2 onCreateï¼ï¼æ¹æ³ï¼å®éè¦ä¸ä¸ª SQLiteDatabase 对象ä½ä¸ºåæ°ï¼æ ¹æ®éè¦å¯¹è¿ä¸ªå¯¹è±¡å¡«å
表ååå§åæ°æ®ã
3 onUpgrage() æ¹æ³ï¼å®éè¦ä¸ä¸ªåæ°ï¼ä¸ä¸ª SQLiteDatabase 对象ï¼ä¸ä¸ªæ§ççæ¬å·åä¸ä¸ªæ°ççæ¬å·ï¼è¿æ ·ä½ å°±å¯ä»¥æ¸
æ¥å¦ä½æä¸ä¸ªæ°æ®åºä»æ§ç模å转åå°æ°ç模åã
æ¥ä¸æ¥è®¨è®ºå
·ä½å¦ä½å建表ãæå
¥æ°æ®ãå é¤è¡¨ççãè°ç¨ getReadableDatabase() æ getWriteableDatabase() æ¹æ³ï¼ä½ å¯ä»¥å¾å° SQLiteDatabase å®ä¾ï¼å
·ä½è°ç¨é£ä¸ªæ¹æ³ï¼åå³äºä½ æ¯å¦éè¦æ¹åæ°æ®åºçå
容ï¼
updateï¼ï¼æ¹æ³æå个åæ°ï¼åå«æ¯è¡¨åï¼è¡¨ç¤ºåååå¼ç ContentValues 对象ï¼å¯éç WHERE æ¡ä»¶åå¯éçå¡«å
WHERE è¯å¥çå符串ï¼è¿äºå符串ä¼æ¿æ¢ WHERE æ¡ä»¶ä¸çâï¼âæ è®°ã
update() æ ¹æ®æ¡ä»¶ï¼æ´æ°æå®åçå¼ï¼æä»¥ç¨ execSQL() æ¹æ³å¯ä»¥è¾¾å°åæ ·çç®çã WHERE æ¡ä»¶åå
¶åæ°åç¨è¿çå
¶ä» SQL APIs 类似ã
delete() æ¹æ³ç使ç¨å update() 类似ï¼ä½¿ç¨è¡¨åï¼å¯éç WHERE æ¡ä»¶åç¸åºçå¡«å
WHERE æ¡ä»¶çå符串ã æ¥è¯¢æ°æ®åº 类似 INSERT, UPDATE, DELETEï¼æ两ç§æ¹æ³ä½¿ç¨ SELECT ä» SQLite æ°æ®åºæ£ç´¢æ°æ®ã
1 ï¼ä½¿ç¨ rawQuery() ç´æ¥è°ç¨ SELECT è¯å¥ï¼ ä½¿ç¨ query() æ¹æ³æ建ä¸ä¸ªæ¥è¯¢ã
Raw Queries æ£å¦ API ååï¼rawQuery() æ¯æç®åç解å³æ¹æ³ãéè¿è¿ä¸ªæ¹æ³ä½ å°±å¯ä»¥è°ç¨ SQL SELECT è¯å¥ã
ä¾å¦ï¼ Cursor c=db.rawQuery( âSELECT name FROM sqlite_master WHERE type=âtableâ AND name=âmytableââ, null);
å¨ä¸é¢ä¾åä¸ï¼æ们æ¥è¯¢ SQLite ç³»ç»è¡¨ï¼sqlite_masterï¼æ£æ¥ table 表æ¯å¦åå¨ãè¿åå¼æ¯ä¸ä¸ª cursor 对象ï¼è¿ä¸ªå¯¹è±¡çæ¹æ³å¯ä»¥è¿ä»£æ¥è¯¢ç»æã å¦ææ¥è¯¢æ¯å¨æçï¼ä½¿ç¨è¿ä¸ªæ¹æ³å°±ä¼é常å¤æã
ä¾å¦ï¼å½ä½ éè¦æ¥è¯¢çåå¨ç¨åºç¼è¯çæ¶åä¸è½ç¡®å®ï¼è¿æ¶åä½¿ç¨ query() æ¹æ³ä¼æ¹ä¾¿å¾å¤ã
Regular Queries query() æ¹æ³ç¨ SELECT è¯å¥æ®µæ建æ¥è¯¢ãSELECT è¯å¥å
容ä½ä¸º query() æ¹æ³çåæ°ï¼æ¯å¦ï¼è¦æ¥è¯¢ç表åï¼è¦è·åçå段åï¼WHERE æ¡ä»¶ï¼å
å«å¯éçä½ç½®åæ°ï¼å»æ¿ä»£ WHERE æ¡ä»¶ä¸ä½ç½®åæ°çå¼ï¼GROUP BY æ¡ä»¶ï¼HAVING æ¡ä»¶ã é¤äºè¡¨åï¼å
¶ä»åæ°å¯ä»¥æ¯ nullãæ以ï¼ä»¥åç代ç 段å¯ä»¥å¯åæï¼
String[] columns={âIDâ, âinventoryâ};
Java代ç
String[] parms={"snicklefritz"}; Cursor result=db.query("widgets", columns, "name=?",parms, null, null, null);
使ç¨æ¸¸æ
ä¸ç®¡ä½ å¦ä½æ§è¡æ¥è¯¢ï¼é½ä¼è¿åä¸ä¸ª Cursorï¼è¿æ¯ Android ç SQLite æ°æ®åºæ¸¸æ ï¼
使ç¨æ¸¸æ ï¼ä½ å¯ä»¥ï¼
éè¿ä½¿ç¨ getCount() æ¹æ³å¾å°ç»æéä¸æå¤å°è®°å½ï¼
éè¿ moveToFirst(), moveToNext(), å isAfterLast() æ¹æ³éåææè®°å½ï¼
éè¿ getColumnNames() å¾å°å段åï¼
éè¿ getColumnIndex() 转æ¢æå段å·ï¼
éè¿ getString()ï¼getInt() çæ¹æ³å¾å°ç»å®å段å½åè®°å½çå¼ï¼
éè¿ requery() æ¹æ³éæ°æ§è¡æ¥è¯¢å¾å°æ¸¸æ ï¼
éè¿ close() æ¹æ³éæ¾æ¸¸æ èµæºï¼
å¨ Android ä¸ä½¿ç¨ SQLite æ°æ®åºç®¡çå·¥å
· å¨å
¶ä»æ°æ®åºä¸ä½å¼åï¼ä¸è¬é½ä½¿ç¨å·¥å
·æ¥æ£æ¥åå¤çæ°æ®åºçå
容ï¼èä¸æ¯ä»
ä»
使ç¨æ°æ®åºç APIã
ä½¿ç¨ Android 模æå¨ï¼æ两ç§å¯ä¾éæ©çæ¹æ³æ¥ç®¡çæ°æ®åºã
é¦å
ï¼æ¨¡æå¨ç»å®äº sqlite3 æ§å¶å°ç¨åºï¼å¯ä»¥ä½¿ç¨ adb shell å½ä»¤æ¥è°ç¨ä»ãåªè¦ä½ è¿å
¥äºæ¨¡æå¨ç shellï¼å¨æ°æ®åºçè·¯å¾æ§è¡ sqlite3 å½ä»¤å°±å¯ä»¥äºã
æ°æ®åºæ件ä¸è¬åæ¾å¨ï¼ /data/data/your.app.package/databases/your-db-name å¦æä½ å欢使ç¨æ´å好çå·¥å
·ï¼ä½ å¯ä»¥ææ°æ®åºæ·è´å°ä½ çå¼åæºä¸ï¼ä½¿ç¨ SQLite-aware 客æ·ç«¯æ¥æä½å®ãè¿æ ·çè¯ï¼ä½ å¨ä¸ä¸ªæ°æ®åºçæ·è´ä¸æä½ï¼å¦æä½ æ³è¦ä½ çä¿®æ¹è½åæ å°è®¾å¤ä¸ï¼ä½ éè¦ææ°æ®åºå¤ä»½åå»ã
ææ°æ®åºä»è®¾å¤ä¸èåºæ¥ï¼ä½ å¯ä»¥ä½¿ç¨ adb pull å½ä»¤ï¼æè
å¨ IDE ä¸åç¸åºæä½ï¼ã
åå¨ä¸ä¸ªä¿®æ¹è¿çæ°æ®åºå°è®¾å¤ä¸ï¼ä½¿ç¨ adb push å½ä»¤ã ä¸ä¸ªææ¹ä¾¿ç SQLite 客æ·ç«¯æ¯ FireFox SQLite Manager æ©å±ï¼å®å¯ä»¥è·¨ææå¹³å°ä½¿ç¨ã
å¦æä½ æ³è¦å¼å Android åºç¨ç¨åºï¼ä¸å®éè¦å¨ Android ä¸åå¨æ°æ®ï¼ä½¿ç¨ SQLite æ°æ®åºæ¯ä¸ç§é常好çéæ©ã
第äºç§ï¼ ç½ç»åå¨æ°æ®
åé¢ä»ç»çå ç§åå¨é½æ¯å°æ°æ®åå¨å¨æ¬å°è®¾å¤ä¸ï¼é¤æ¤ä¹å¤ï¼è¿æä¸ç§åå¨ï¼è·åï¼æ°æ®çæ¹å¼ï¼éè¿ç½ç»æ¥å®ç°æ°æ®çåå¨åè·åã
æ们å¯ä»¥è°ç¨WebServiceè¿åçæ°æ®ææ¯è§£æHTTPåè®®å®ç°ç½ç»æ°æ®äº¤äºã
温馨提示:答案为网友推荐,仅供参考