中国移动互联网研发培训专家()初始化数据库清单18.MainActivity插入到数据库中清单19.MainActivitySelectAll和将数据绑定到ListView清单20.从本地私有存储器读取数据清单21.从内部私有存储器读取数据中国移动互联网研发培训专家/***WipeouttheDB*/publicvoidclearAll(){db.delete(TABLE_NAME,null,null);}提供了两个SELECTALL方法:cursorSelectAll()和listSelectAll(),前者返回一个游标,后者返回一个Friend对象ArrayList。这些方法在从数据库加载信息时由MainActivity调用(参见清单14)。中国移动互联网研发培训专家/***SelectAllreturnsacursor*@returnthecursorfortheDBselection*/publicCursorcursorSelectAll(){Cursorcursor=this.db.query(TABLE_NAME,//TableNamenewString[]{fid,name},//Columnstoreturnnull,//SQLWHEREnull,//SelectionArgsnull,//SQLGROUPBYnull,//SQLHAVINGname);//SQLORDERBYreturncursor;}中国移动互联网研发培训专家listSelectAll()方法返回ArrayList容器中选定的行,该容器由MainActivity用来将它绑定到MainScreenListView(参见清单15)。中国移动互联网研发培训专家*SelectAllthatreturnsanArrayList*@returntheArrayListfortheDBselection*/publicArrayListFriendlistSelectAll(){ArrayListFriendlist=newArrayListFriend();Cursorcursor=this.db.query(TABLE_NAME,newString[]{fid,name},null,null,null,null,name);if(cursor.moveToFirst()){do{中国移动互联网研发培训专家Friendf=newFriend();f.id=cursor.getString(0);f.name=cursor.getString(1);list.add(f);}while(cursor.moveToNext());}if(cursor!=null&&!cursor.isClosed()){cursor.close();}returnlist;}如果检测到数据库版本更改,就会调用onUpgrade()方法(参见清单16)。中国移动互联网研发培训专家/***InvokedifaDBupgrade(versionchange)hasbeendetected*/@Override/***InvokedifaDBupgrade(versionchange)hasbeendetected*/@OverridepublicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){//Hereaddanystepsneededduetoversionupgrade//forexample,dataformatconversions,oldtables//nolongerneeded,etc}}中国移动互联网研发培训专家整个MainActivity中,当您将信息导出到数据库、从数据库加载信息以及清理数据库时,都会使用DBHelper。第一件事是在创建MainActivity时实例化DBHelper。在onCreate()时执行的其他任务包括初始化不同的屏幕视图(参见清单17)。中国移动互联网研发培训专家publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);appContext=this;setContentView(R.layout.main);dbHelper=newDBHelper(this);listView=(ListView)findViewById(R.id.friendsview);中国移动互联网研发培训专家friendsArrayAdapter=newFriendsArrayAdapter(this,R.layout.rowlayout,friends);listView.setAdapter(friendsArrayAdapter);::}清单18展示了如何从资产加载好友列表以及如何将之解析并插入数据库中。中国移动互联网研发培训专家Stringfname=prefsGetFilename();if(fname!=null&&fname.length()0){buffer=getAsset(fname);//ParsetheJSONfileStringfriendslist=newString(buffer);finalJSONObjectjson=newJSONObject(friendslist);JSONArrayd=json.getJSONArray(data);intl=d.length();中国移动互联网研发培训专家for(inti2=0;i2l;i2++){JSONObjecto=d.getJSONObject(i2);Stringn=o.getString(name);Stringid=o.getString(id);dbHelper.insert(id,n);}//OnlytheoriginalownerthreadcantouchitsviewsMainActivity.this.runOnUiThread(newRunnable(){publicvoidrun(){friendsArrayAdapter.notifyDataSetChanged();}});}清单19展示了如何执行SELECTALL以及如何将数据绑定到主屏幕ListView。中国移动互联网研发培训专家finalArrayListFrienddbFriends=dbHelper.listSelectAll();if(dbFriends!=null){//OnlytheoriginalownerthreadcantouchitsviewsMainActivity.this.runOnUiThread(newRunnable(){publicvoidrun(){friendsArrayAdapter=中国移动互联网研发培训专家newFriendsArrayAdapter(MainActivity.this,R.layout.rowlayout,dbFriends);listView.setAdapter(friendsArrayAdapter);friendsArrayAdapter.notifyDataSetChanged();}});}接下来,了解一下在示例应用程序中使用InternalStorageAPI。中国移动互联网研发培训专家为私有数据使用设备的内部存储器有了数据存储API,您可以使用内部存储器存储数据。信息可以是私有的,您可以有选择地让其他应用程序对之具有读或写的访问权限。本节介绍这个存储私有数据的API,它使用android.content.Context.openFileInput、openFileOutput和getCacheDir()来高速缓存数据,而不是永久地存储。清单20中的代码片段展示了如何从内部私有存储器读取数据。使得存储器为私有的方法是对openFileOutput()使用MODE_PRIVATE。中国移动互联网研发培训专家*Writescontenttointernalstoragemakingthecontentprivateto*theapplication.ThemethodcanbeeasilychangedtotaketheMODE*asargumentandletthecallerdictatethevisibility:*MODE_PRIVATE,MODE_WORLD_WRITEABLE,MODE_WORLD_READABLE,etc.**@paramfilename-thenameofthefiletocreate*@paramcontent-thecontenttowrite*/中国移动互联网研发培训专家publicvoidwriteInternalStoragePrivate(Stringfilename,byte[]content){try{//MODE_PRIVATEcreates/replacesafileandmakes//itprivatetoyourapplication.Othermodes://MODE_WORLD_WRITEABLE//MODE_WORLD_READABLE//MODE_APPEND中国移动互联网研发培训专家FileOutputStreamfos=openFileOutput(filename,Context.MODE_PRIVATE);fos.write(content);fos.close();}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}清单21中