【发布时间】:2019-08-28 07:06:22
【问题描述】:
我正在尝试从 android 设备中选择一个文件(csv 文件)。它在模拟器中运行良好。但是,当我在真实设备中测试时,我选择了一个 csv 文件,它一直显示“没有这样的文件或目录”。我不明白为什么它不能在真实设备上运行。我已经在清单中添加了权限。这是代码
db=DataBaseHelper(this)
lbl=EditText(this)
lbl=view.findViewById(R.id.edit_master)
noti = lbl.text.toString()
btnimport=view.findViewById(R.id.img_import)
btnimport.setOnClickListener {
val fileintent=Intent(Intent.ACTION_GET_CONTENT)
fileintent.type="text/csv"
try {
startActivityForResult(fileintent, requestcode)
} catch (e: ActivityNotFoundException) {
lbl.text="No activity can handle picking a file. Showing alternatives."
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (data == null)
return
if (requestCode<=requestcode) {
val filepath=data.data!!.path
println(filepath)
lbl.text = filepath
val inputStream=FileInputStream(filepath)
println(inputStream)
val bb=db.writableDatabase
val myPath = DB_PATH + REAL_DATABASE
val db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE)
val tableName="Master"
db.execSQL("delete from $tableName")
try {
println("gg")
if (resultCode == Activity.RESULT_OK) {
try {
val file=InputStreamReader(inputStream)
val buffer=BufferedReader(file)
buffer.readLine()
val contentValues=ContentValues()
db.beginTransaction()
while(true) {
val line=buffer.readLine()
if (line == null) break
val str=line.split(",".toRegex(), 3)
.toTypedArray()
val _id1=str[0].toString()
val quantity1=str[1].toString()
val name=str[2].toString()
contentValues.put("_id1", _id1)
contentValues.put("quantity1", quantity1)
contentValues.put("name", name)
db.insert(tableName, null, contentValues)
}
db.setTransactionSuccessful()
db.endTransaction()
} catch (e: IOException) {
if (db.inTransaction())
db.endTransaction()
val d=Dialog(this)
d.setTitle(e.message.toString() + "first")
d.show()
}
} else {
if (db.inTransaction())
db.endTransaction()
val d=Dialog(this)
d.setTitle("Only CSV files allowed")
d.show()
}
} catch (ex: Exception) {
if (db.inTransaction())
db.endTransaction()
val d=Dialog(this)
d.setTitle(ex.message.toString() + "second")
d.show()
}
}
}
【问题讨论】:
-
val filepath=data.data!!.path错误 - 它不指向任何现有路径 - 只需使用data.data和ContentResolver获取InputStream以供阅读 -
但是在模拟器上运行,有什么区别?
-
好的
filepath在你的情况下是什么?试图Log.d那个值?如果是这样,您在 logcat 上看到了什么? -
它显示了我选择的路径“/root/storage/emulated/0/Download/original.csv”。
-
如果你执行
adb shell ls -l /root/storage/emulated/0/Download/original.csv命令你会看到什么?