gpt4 book ai didi

java - IllegalArgumentException : Invalid column latitude

转载 作者:行者123 更新时间:2023-12-03 11:18:32 27 4
gpt4 key购买 nike

关注 documentation
我试过查询 ContentResolver获取文件大小,如下所示:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == video_request_code) {
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
Cursor cur = getContentResolver().query(uri, null, null, null, null);
try {
if (cur != null && cur.moveToFirst()){
if (uri.getScheme() != null){
if (uri.getScheme().equals("content")) {
int sizeIndex = cur.getColumnIndex(OpenableColumns.SIZE);
Log.e("size", ""+cur.getLong(sizeIndex));
}else if (uri.getScheme().equals("file")) {
File ff = new File(uri.getPath());
Log.e("size", ""+ff.length());
}
}
}
}catch (Exception e){
e.printStackTrace();
}
finally {
if (cur != null)
cur.close();
}
}
}
}

然后我收到以下错误:
java.lang.IllegalArgumentException: Invalid column latitude
at android.app.ActivityThread.deliverResults(ActivityThread.java:4845)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4886)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.IllegalArgumentException: Invalid column latitude
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:170)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:423)
at android.content.ContentResolver.query(ContentResolver.java:944)
at android.content.ContentResolver.query(ContentResolver.java:880)
at android.content.ContentResolver.query(ContentResolver.java:836)
at com.my.package.MainActivity.onActivityResult(MainActivity.java:146)
...

崩溃指向 Cursor cur = getContentResolver().query(uri, null, null, null, null); ,但如您所见,我不是在查询纬度列。事实上,在崩溃的时候,我还没有查询任何列。

我只能在运行 Android 10 的设备上从 Google Photo 中选择文件时重现此问题。

我的问题:

为什么会发生这种情况,我该如何克服?

编辑:

我尝试通过列的投影。为了测试,我通过了以下内容:

String[] projection = {OpenableColumns.SIZE, OpenableColumns.DISPLAY_NAME};
Cursor cur = getContentResolver().query(uri, projection, null, null, null);


但我仍然得到同样的错误。

最佳答案

我在 Android 10+ 中遇到了同样的问题。此问题是由于 Android 10 中引入的范围存储造成的。
解决方案:
我对这个问题的解决方案是从 Uri 创建一个输入流。检查下面的代码 fragment 。

fun getVideoRealPath(
context: Context, uri: Uri
): File? {
val contentResolver = context.contentResolver ?: return null

// Create file path inside app's data dir
val filePath = (context.applicationInfo.dataDir + File.separator
+ System.currentTimeMillis())
val file = File(filePath)
try {
val inputStream = contentResolver.openInputStream(uri) ?: return null
val outputStream: OutputStream = FileOutputStream(file)
val buf = ByteArray(1024)
var len: Int
while (inputStream.read(buf).also { len = it } > 0) outputStream.write(buf, 0, len)
outputStream.close()
inputStream.close()
} catch (ignore: IOException) {
return null
}
return file
}

关于java - IllegalArgumentException : Invalid column latitude,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61586124/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com