android-studio - java.lang.NumberFormatException:对于输入字符串:“文件名”,同时从文件管理器中选择文件。安卓工作室
问题描述
这是我的选择文件代码,我在其中使用 uri 类选择文件并将文件路径和 uri 对象发送到 Filepath 类。
当我试图从下载部分中选择时,它会抛出numberformatexception:for input string:"file name"。请帮我解决这个错误,因为我正在尝试将文件存储到数据库中
选择文件.java
if (requestCode == 1 && resultCode == RESULT_OK && data != null && data.getData() != null) {
uri = data.getData();
String uriString = uri.toString();
File myFile = new File(uriString);
PdfNameHolder = myFile.getName();
PdfPathHolder = FilePath.getPath(this, uri);
}
在这里我选择文件的内容
文件路径.java
public class FilePath
{
public static String getPath(final Context context, final Uri uri)
{
//check here to KITKAT or new version
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
// DocumentProvider
if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
}
//DownloadsProvider
else if (isDownloadsDocument(uri)) {
try {
//error is in this block
final String id = DocumentsContract.getDocumentId(uri);
Toast.makeText(context, id, Toast.LENGTH_SHORT).show();
int l = Integer.parseInt(id.trim());
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), l);
return getDataColumn(context, contentUri, null, null);
}
catch (Exception e){
Toast.makeText(context, "Error1 : "+e, Toast.LENGTH_SHORT).show();
}
}
// MediaProvider
else if (isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[] {
split[1]
};
return getDataColumn(context, contentUri, selection, selectionArgs);
}
}
// MediaStore (and general)
else if ("content".equalsIgnoreCase(uri.getScheme())) {
// Return the remote address
if (isGooglePhotosUri(uri))
return uri.getLastPathSegment();
return getDataColumn(context, uri, null, null);
}
// File
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
private static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null);
if (cursor != null && cursor.moveToFirst()) {
final int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
}
}
catch (Exception e) {
Toast.makeText(context, "Error : "+e, Toast.LENGTH_SHORT).show();
}
finally{
if (cursor != null)
cursor.close();
}
return null;
}
private static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
private static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
private static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
private static boolean isGooglePhotosUri(Uri uri) {
return "com.google.android.apps.photos.content".equals(uri.getAuthority());
}
}
解决方案
推荐阅读
- c# - CopyTo 中的随机文件大小 - C# .Net Core
- python - 根据时间条件将数据帧的一部分与特定值相乘
- python - 在 cartopy 上绘制匀称的多边形
- python - Pandas Group By 然后合并使用多列
- internet-explorer - Bulma 导航栏下拉菜单在 Internet Explorer 11 中不起作用
- git - Git不会忽略gitignore文件中列出的文件和文件夹
- api - 当他们在一些 Open API 调用中要求“模式”时,涂鸦 API 指的是什么?
- reactjs - 无法从 mapDispatchToProps 访问属性
- python - /admin/ 'WSGIRequest' 对象的 AttributeError 没有属性 'user'
- node.js - 在 Heroku 上使用 NGINX 作为 express.js 404 的代理