Androidåºç¨å¼åä¸,ç»æ们æä¾äº5ç§æ°æ®çåå¨æ¹å¼
1 使ç¨SharedPreferencesåå¨æ°æ®
2 æ件åå¨æ°æ®
3 SQLiteæ°æ®åºåå¨æ°æ®
4 使ç¨ContentProvideråå¨æ°æ®
5 ç½ç»åå¨æ°æ®
ä¸åçä¸å¡é»è¾,æè
éæ±,ç¨ä¸åçå®ç°æ¹å¼ï¼ä»¥ä¸æ¯è¿å ä¸æ°æ®åå¨æ¹å¼ç说æç¨åæ³:
第ä¸ç§ï¼ 使ç¨SharedPreferencesåå¨æ°æ®
SharedPreferencesæ¯Androidå¹³å°ä¸ä¸ä¸ªè½»é级çåå¨ç±»ï¼ä¸»è¦æ¯ä¿åä¸äºå¸¸ç¨çé
ç½®æ¯å¦çªå£ç¶æï¼
ä¸è¬å¨Activityä¸ éè½½çªå£ç¶æonSaveInstanceStateä¿åä¸è¬ä½¿ç¨SharedPreferenceså®æï¼
å®æä¾äºAndroidå¹³å°å¸¸è§çLongé¿ æ´å½¢ãIntæ´å½¢ãStringå符串åçä¿åã
SharedPreferences类似è¿å»Windowsç³»ç»ä¸çinié
ç½®æ件ï¼ä½æ¯å®å为å¤ç§æéï¼
å¯ä»¥å
¨å±å
±äº«è®¿é®ï¼android123æ示æç»æ¯ä»¥xmlæ¹å¼æ¥ä¿åï¼æ´ä½æçæ¥çä¸æ¯ç¹å«çé«ï¼
对äºå¸¸è§çè½»é级èè¨æ¯SQLiteè¦å¥½ä¸å°ï¼å¦æççåå¨éä¸å¤§å¯ä»¥èèèªå·±å®ä¹æä»¶æ ¼å¼ã
xml å¤çæ¶Dalvikä¼éè¿èªå¸¦åºå±çæ¬å°XML Parser解æï¼æ¯å¦XMLpullæ¹å¼ï¼è¿æ ·å¯¹äºå
åèµæºå ç¨æ¯è¾å¥½ã
å®çæ¬è´¨æ¯åºäºXMLæ件åå¨key-valueé®å¼å¯¹æ°æ®ï¼é常ç¨æ¥åå¨ä¸äºç®åçé
置信æ¯ã
å
¶åå¨ä½ç½®å¨/data/data/< >/shared_prefsç®å½ä¸ã
SharedPreferences对象æ¬èº«åªè½è·åæ°æ®èä¸æ¯æåå¨åä¿®æ¹ï¼åå¨ä¿®æ¹æ¯éè¿Editor对象å®ç°ã
å®ç°SharedPreferencesåå¨çæ¥éª¤å¦ä¸ï¼
ä¸ãæ ¹æ®Contextè·åSharedPreferences对象
äºãå©ç¨edit()æ¹æ³è·åEditor对象ã
ä¸ãéè¿Editor对象åå¨key-valueé®å¼å¯¹æ°æ®ã
åãéè¿commit()æ¹æ³æ交æ°æ®ã
ä¸é¢æ¯ç¤ºä¾ä»£ç ï¼
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//è·åSharedPreferences对象
Context ctx = MainActivity.this;
SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);
//åå
¥æ°æ®
Editor editor = sp.edit();
editor.putString("STRING_KEY", "string");
editor.putInt("INT_KEY", 0);
editor.putBoolean("BOOLEAN_KEY", true);
editor.commit();
//è¿åSTRING_KEYçå¼
Log.d("SP", sp.getString("STRING_KEY", "none"));
//å¦æNOT_EXISTä¸åå¨ï¼åè¿åå¼ä¸º"none"
Log.d("SP", sp.getString("NOT_EXIST", "none"));
}
}
è¿æ®µä»£ç æ§è¡è¿åï¼å³å¨/data/data/com.test/shared_prefsç®å½ä¸çæäºä¸ä¸ªSP.xmlæ件ï¼ä¸ä¸ªåºç¨å¯ä»¥å建å¤ä¸ªè¿æ ·çxmlæ件ã
SharedPreferences对象ä¸SQLiteæ°æ®åºç¸æ¯ï¼å
å»äºå建æ°æ®åºï¼å建表ï¼åSQLè¯å¥ç诸å¤æä½ï¼ç¸å¯¹èè¨æ´å æ¹ä¾¿ï¼ç®æ´ã
ä½æ¯SharedPreferencesä¹æå
¶èªèº«ç¼ºé·ï¼æ¯å¦å
¶èè½åå¨booleanï¼intï¼floatï¼longåStringäºç§ç®åçæ°æ®ç±»åï¼æ¯å¦å
¶æ æ³è¿è¡æ¡ä»¶æ¥è¯¢çã
æ以ä¸è®ºSharedPreferencesçæ°æ®åå¨æä½æ¯å¦ä½ç®åï¼å®ä¹åªè½æ¯åå¨æ¹å¼çä¸ç§è¡¥å
ï¼èæ æ³å®å
¨æ¿ä»£å¦SQLiteæ°æ®åºè¿æ ·çå
¶ä»æ°æ®åå¨æ¹å¼ã
第äºç§ï¼ æ件åå¨æ°æ®
å
³äºæ件åå¨ï¼Activityæä¾äºopenFileOutput()æ¹æ³å¯ä»¥ç¨äºææ°æ®è¾åºå°æ件ä¸ï¼å
·ä½çå®ç°è¿ç¨ä¸å¨J2SEç¯å¢ä¸ä¿åæ°æ®å°æ件ä¸æ¯ä¸æ ·çã
æ件å¯ç¨æ¥åæ¾å¤§éæ°æ®ï¼å¦ææ¬ãå¾çãé³é¢çã
é»è®¤ä½ç½®ï¼/data/data/< >/files/***.***ã
代ç 示ä¾ï¼
public void save(){
try {
FileOutputStream outStream=this.openFileOutput("a.txt",Context.MODE_WORLD_READABLE);
outStream.write(text.getText().toString().getBytes());
outStream.close();
Toast.makeText(MyActivity.this,"Saved",Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
return;
}
catch (IOException e){
return ;
}
}
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 ï¼åªæè¿æ ·å
¶ä»ç¨åºæè½æ£ç¡®è®¿é®ã
读åæ件示ä¾ï¼
public void load(){
try {
FileInputStream inStream=this.openFileInput("a.txt");
ByteArrayOutputStream stream=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int length=-1;
while((length=inStream.read(buffer))!=-1) {
stream.write(buffer,0,length);
}
stream.close();
inStream.close();
text.setText(stream.toString());
Toast.makeText(MyActivity.this,"Loaded",Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e){
return ;
}
}
对äºç§ææ件åªè½è¢«å建该æ件çåºç¨è®¿é®ï¼
å¦æå¸ææ件è½è¢«å
¶ä»åºç¨è¯»ååï¼
å¯ä»¥å¨å建æ件æ¶ï¼æå®Context.MODE_WORLD_READABLEåContext.MODE_WORLD_WRITEABLEæéã
Activityè¿æä¾äºgetCacheDir()ågetFilesDir()æ¹æ³ï¼ g
etCacheDir()æ¹æ³ç¨äºè·å/data/data//cacheç®å½ getFilesDir()æ¹æ³ç¨äºè·å/data/data//filesç®å½ã
ææ件åå
¥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ä¸å建ä¸å é¤æ件æé -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- å¾SDCardåå
¥æ°æ®æé -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
è¦å¾SDCardåæ¾æ件ï¼ç¨åºå¿
é¡»å
å¤æææºæ¯å¦è£
æSDCardï¼å¹¶ä¸å¯ä»¥è¿è¡è¯»åã
注æï¼è®¿é®SDCardå¿
é¡»å¨AndroidManifest.xmlä¸å å
¥è®¿é®SDCardçæéã
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File sdCardDir = Environment.getExternalStorageDirectory();//è·åSDCardç®å½
File saveFile = new File(sdCardDir, âa.txtâ);
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("test".getBytes());
outStream.close();
}
Environment.getExternalStorageState()æ¹æ³ç¨äºè·åSDCardçç¶æï¼å¦æææºè£
æSDCardï¼å¹¶ä¸å¯ä»¥è¿è¡è¯»åï¼é£ä¹æ¹æ³è¿åçç¶æçäºEnvironment.MEDIA_MOUNTEDã
Environment.getExternalStorageDirectory()æ¹æ³ç¨äºè·åSDCardçç®å½ï¼å½ç¶è¦è·åSDCardçç®å½ï¼ä½ ä¹å¯ä»¥è¿æ ·åï¼
File sdCardDir = new File("/sdcard"); //è·åSDCardç®å½
File saveFile = new File(sdCardDir, "itcast.txt");
//ä¸é¢ä¸¤å¥ä»£ç å¯ä»¥åæä¸å¥ï¼
File saveFile = new File("/sdcard/a.txt");
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("test".getBytes());
outStream.close();
第ä¸ç§ï¼ 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 对象ï¼ä¸ä¸ªæ§ççæ¬å·åä¸ä¸ªæ°ççæ¬å·ï¼è¿æ ·ä½ å°±å¯ä»¥æ¸
æ¥å¦ä½æä¸ä¸ªæ°æ®åºä»æ§ç模å转åå°æ°ç模åã
第åç§ ä½¿ç¨ContentProvideråå¨æ°æ® ContentProviderå
¶å®ä¹æ¯éè¿æ°æ®åºçæ¹å¼æ¥åå¨æ°æ®ç,å æ¤è¿éä¸åå详ç»ä»ç»
第äºç§ ç½ç»åå¨æ°æ® ä¹å°±æ¯è¯´å°æ°æ®ä¿åå¨æå¡å¨,androidä¸åªéè¦éè¿httpclientåèµ·ä¸ä¸ªè¯·æ±,åæå¡å¨è·åæ°æ®å³å¯
温馨提示:答案为网友推荐,仅供参考