gpt4 book ai didi

Android 从 onActivityResult 获取文件名和路径

转载 作者:行者123 更新时间:2023-12-04 23:53:17 26 4
gpt4 key购买 nike

我正在努力实现的目标。我有一个 button,当单击该按钮时,应用程序会打开一个文件选择器并且用户选择一个文件。然后应用程序使用 FileInputStream 读取文件并生成 byte[]。我在 button 下方有一个 TextView,它将简单地显示 byte[].length。这是 button.onClick() 事件中的代码:

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");

requestFilePickerCode = parent.registerActivityResultListener(this);
try
{
parent.startActivityForResult(intent, requestFilePickerCode);
}
catch (ActivityNotFoundException e)
{
Toast.makeText(task.getParent(), "Please install a file manager", Toast.LENGTH_SHORT).show();
}

现在这段代码可以工作了,我已经确认它会在选择文件时触发 onActivityResult。我只是打印一个 Log 来显示 data.toString() ,它会产生以下输出:

11-02 15:14:36.196 2535-2535/? V/class za.co.gpsts.gpsjobcard.utility.handlers.PebbleTypeHandlerBinary: -----> content:/com.android.providers.downloads.documents/document/1

所以它似乎正在获取选定的文件。当我运行应用程序并选择一个文件时,它会引发我的自定义错误:

11-02 15:14:36.196 2535-2535/? E/class za.co.gpsts.gpsjobcard.utility.handlers.PebbleTypeHandlerBinary: -----> File does not exist

这显然表明我没有得到文件。这是我的代码:

@Override
public boolean onActivityResult(int requestCode, int resultCode, Intent data)
{
byte[] fileContent;

// check that data is not null and assign to file if not null
if (data != null)
{
Uri uri = data.getData();
String uriString = uri.toString();
file = new File(uriString);

Log.v(PebbleTypeHandlerBinary.class.toString(), "-----> " + file.toString());

// declare file input stream and read bytes
// write to string variable to test and test output
FileInputStream fin = null;
try
{
fin = new FileInputStream(file);
fileContent = new byte[(int) file.length()];

fin.read(fileContent);
String test = new String(fileContent);
Log.v(PebbleTypeHandlerBinary.class.toString(), "=====> " + test);
}
catch (FileNotFoundException e)
{
Toast.makeText(task.getParent(), "File not found", Toast.LENGTH_SHORT).show();
Log.e(PebbleTypeHandlerBinary.class.toString(), "-----> File does not exist");
}
catch (IOException e)
{
Toast.makeText(task.getParent(), "Error reading file", Toast.LENGTH_SHORT).show();
Log.e(PebbleTypeHandlerBinary.class.toString(), "-----> Error while reading the file");
}
finally
{
// close the file input stream to stop mem leaks
try
{
if (fin != null)
{
fin.close();
}
} catch (IOException e)
{
Log.e(PebbleTypeHandlerBinary.class.toString(), "-----> Error closing the stream");
}
}

Log.v(PebbleTypeHandlerBinary.class.toString(), data.toString());
}

return false;
}

请你们检查我的代码并帮助我完成这项工作。任何帮助将不胜感激。

最佳答案

/* 你可以用这个方法得到名字和大小。

  • 使用光标。
  • Uri uri = data.getData();
  • 从 onActivityResult() 获取数据*/;

Cursor 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();

关于Android 从 onActivityResult 获取文件名和路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33478911/

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