专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Android

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

发布时间:2010-05-30 10:57:36 文章来源:www.iduyao.cn 采编人员:星星草
同样的一段代码,升级了模拟器之后就出问题了,苦闷中,求高人帮助!!
自己摸索着在做一个公交查询的应用,写了个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命令行参数表示虚拟磁盘的卷标,可以没有该参数。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: