我正在努力实现什么目标。我有一个button
,当单击按钮时,应用程序会打开一个文件选择器,用户选择一个文件。然后,应用程序使用 aFileInputStream
读取文件并生成byte[]
. 我TextView
下面有一个button
,然后将简单地显示byte[].length
. 这是事件中的代码button.onClick()
:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);\n intent.addCategory(Intent.CATEGORY_OPENABLE);\n intent.setType("*/*");\n\n requestFilePickerCode = parent.registerActivityResultListener(this);\n try\n {\n parent.startActivityForResult(intent, requestFilePickerCode);\n }\n catch (ActivityNotFoundException e)\n {\n Toast.makeText(task.getParent(), "Please install a file manager", Toast.LENGTH_SHORT).show();\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n现在这段代码可以工作,并且我已经确认它onActivityResult
在选择文件时会触发。我只需打印 aLog
来显示,data.toString()
它会产生以下输出:
11-02 15:14:36.196 2535-2535/? V/class\xc2\xa0za.co.gpsts.gpsjobcard.utility.handlers.PebbleTypeHandlerBinary: -----> content:/com.android.providers.downloads.documents/document/1\n
Run Code Online (Sandbox Code Playgroud)\n\n所以它似乎正在获取选定的文件。当我运行应用程序并选择一个文件时,它会抛出我的自定义错误:
\n\n11-02 15:14:36.196 2535-2535/? E/class\xc2\xa0za.co.gpsts.gpsjobcard.utility.handlers.PebbleTypeHandlerBinary: -----> File does not exist\n
Run Code Online (Sandbox Code Playgroud)\n\n这显然表明我没有收到该文件。这是我的代码:
\n\n@Override\npublic boolean onActivityResult(int requestCode, int resultCode, Intent data)\n{\n byte[] fileContent;\n\n // check that data is not null and assign to file if not null\n if (data != null)\n {\n Uri uri = data.getData();\n String uriString = uri.toString();\n file = new File(uriString);\n\n Log.v(PebbleTypeHandlerBinary.class.toString(), "-----> " + file.toString());\n\n // declare file input stream and read bytes\n // write to string variable to test and test output\n FileInputStream fin = null;\n try\n {\n fin = new FileInputStream(file);\n fileContent = new byte[(int) file.length()];\n\n fin.read(fileContent);\n String test = new String(fileContent);\n Log.v(PebbleTypeHandlerBinary.class.toString(), "=====> " + test);\n }\n catch (FileNotFoundException e)\n {\n Toast.makeText(task.getParent(), "File not found", Toast.LENGTH_SHORT).show();\n Log.e(PebbleTypeHandlerBinary.class.toString(), "-----> File does not exist");\n }\n catch (IOException e)\n {\n Toast.makeText(task.getParent(), "Error reading file", Toast.LENGTH_SHORT).show();\n Log.e(PebbleTypeHandlerBinary.class.toString(), "-----> Error while reading the file");\n }\n finally\n {\n // close the file input stream to stop mem leaks\n try\n {\n if (fin != null)\n {\n fin.close();\n }\n } catch (IOException e)\n {\n Log.e(PebbleTypeHandlerBinary.class.toString(), "-----> Error closing the stream");\n }\n }\n\n Log.v(PebbleTypeHandlerBinary.class.toString(), data.toString());\n }\n\n return false;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n请你们检查我的代码并帮助我完成这项工作。任何帮助,将不胜感激。
\n/* 你可以用这个方法得到名字和大小。
游标cursor = getContentResolver().query(uri, null, null, null, null);
int nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
int sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE);
cursor.moveToFirst();
String name = cursor.getString(nameIndex);
String size = Long.toString(cursor.getLong(sizeIndex));
Toast.makeText(this, "name : "+name+"\nsize : "+size, Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12588 次 |
最近记录: |