自己摸索着在做一个公交查询的应用,写了个openDatabase方法用于打开数据库,在1.5的版本下运行正常,后来要使用Google Map就把模拟器升级到2.2支持Google APIs,但同样是这个方法打开数据库,返回SQLiteDatabase对象就是不成功,大家帮我看看吧,一个人自学也没地方问人去,只能在这求助了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"/> ,但是问题依旧,实在找不出原因了,请大家帮我找找原因吧!!!
{
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"/> ,但是问题依旧,实在找不出原因了,请大家帮我找找原因吧!!!
解决方案 »
- 真机上is waiting the debugger to attach问题请教
- 关于安卓模拟器的GPS地理位置功能
- 关于调用微信接口的问题
- Java [android]中如何让 DatagramPacket 经过指定IP和端口
- eclipse作出的android app怎么变成apk
- 请教!Android网络访问支持“自定义异常恢复机制”吗?
- android远程试听mp3异常异常
- MediaPlayer对rtsp协议的支持问题
- [color=#FF99CC]应用里使用百度地图,但百度地图显示和反应太慢了,怎么办[/color]
- 将文件写入系统路径下
- 自定义View类,怎样在View中加几个按钮??
- 为什么我的按钮需要点击两次才会相应onclick方法?
两种方式一种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了