同样的一段代码,升级了模拟器之后就出有关问题了,苦闷中,求高人帮助!

同样的一段代码,升级了模拟器之后就出问题了,苦闷中,求高人帮助!!自己摸索着在做一个公交查询的应用,写了

同样的一段代码,升级了模拟器之后就出问题了,苦闷中,求高人帮助!!
自己摸索着在做一个公交查询的应用,写了个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"/> ,但是问题依旧,实在找不出原因了,请大家帮我找找原因吧!!!

[解决办法]
探讨

引用:
模拟器应该也要个sdcard.img 模拟sdcard吧?

为什么要sdcard.img呢 求详解啊

[解决办法]
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命令行参数表示虚拟磁盘的卷标,可以没有该参数。


 
二、激活sdcard adb命令emulator 
1.命令行输入:emulator -avd myadvname -sdcard F:\mysdcard.img
 
三、sdcard中加入内容 cmd
F:\Android\android-sdk-windows\tools>adb push F:\a.mp3 /sdcard/a.mp3 
成功后看到
473 KB/s (0 bytes in 2714583.005s)
可以在进入模拟器界面中的Music可以看到你的mp3了
启动模拟时可以看到左上角有一个卡的图标闪过,就说明加载SDCard启动OK了