自己摸索着在做一个公交查询的应用,写了个openDatabase方法用于打开数据库,在1.5的版本下运行正常,后来要使用Google Map就把模拟器升级到2.2支持Google APIs,但同样是这个方法打开数据库,返回SQLiteDatabase对象就是不成功,大家帮我看看吧,一个人自学也没地方问人去,只能在这求助了
- Java code
public class Main extends ListActivity { private final String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory() .getAbsolutePath(); private final String DATABASE_FILENAME = "businfo.db"; private SQLiteDatabase database; private View dialogView; private View dialogSDView; private AutoCompleteTextView actvKeyWord; private AutoCompleteTextView actvStartStop; private AutoCompleteTextView actvDestination; private static String[] items = new String[] {"地图浏览","定位当前位置","查找定位","车次查询","站点查询","站站查询","换乘查询"}; @Override protected void onListItemClick(ListView l, View view, int position, long id) { if(database==null) { Log.d("database110", "database==null"); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); database = openDatabase(); List<Map<String,Object>> appItems = new ArrayList<Map<String,Object>>(); for(int i=0;i<items.length;i++) { Map<String,Object> appItem = new HashMap<String,Object>(); appItem.put("Logo", R.drawable.bus1); appItem.put("ItemName", items[i]); appItems.add(appItem); } SimpleAdapter itemAdapter = new SimpleAdapter(this,appItems,R.layout.main, new String[]{"ItemName","Logo"}, new int[]{R.id.tvMainItem,R.id.ivLogo}); setListAdapter(itemAdapter); } private SQLiteDatabase openDatabase() { try { String databaseFilename = DATABASE_PATH+"/"+DATABASE_FILENAME; Log.d("path110", databaseFilename); if(!(new File(databaseFilename).exists())) { InputStream is = getResources().openRawResource(R.raw.businfo); FileOutputStream fos = new FileOutputStream(databaseFilename); Log.d("message", "2222222222222222222222222"); byte[] buffer = new byte[8192]; int count = 0; while((count = is.read(buffer))>0) { fos.write(buffer, 0, count); } fos.close(); is.close(); } SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null); return database; } catch(Exception e) { Log.d("message110", e.toString()); } return null; } }
在openDatabase方法中会抛出 java.is.FileNoFoundException:/mnt/sdcard/businfo.db(Permission denied)
,我以为是权限问题,所以在Manifest当中加了句<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> ,但是问题依旧,实在找不出原因了,请大家帮我找找原因吧!!!
------解决方案--------------------
------解决方案--------------------
Android创建 sdcard
两种方式一种CMD中ADB命令另外一种IDE种界面
一、cmd进入tools目录输入mksdcard -l mycard 100M F:mysdcard.img
1.mksdcard命令在F盘下新建一个虚拟磁盘给模拟器用,文件名mysdcard后缀可以
自定义如mycard.tank。
2. 默认单位为k 这里我写的100M 最小要大于9M,最大看你的硬盘,你要100000M我也不反对。
3. -l命令行参数表示虚拟磁盘的卷标,可以没有该参数。