Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android 4.4+;_Android_Android Asynctask_Filechooser - Fatal编程技术网

在Android 4.4+;

在Android 4.4+;,android,android-asynctask,filechooser,Android,Android Asynctask,Filechooser,我正在开发一个应用程序,可以从设备(或者dropbox或驱动器)上的几个.json文件中读取数据 用户使用操作获取内容意图选择这些文件。此意图返回所选文件的URI,我从中获取路径,这些路径被发送到AsyncTask以在后台加载 在安卓4.4之前,它工作得很好。现在,某些内容选择器(尤其是android自己的“下载”活动)返回的uri不包含实际的文件名或路径 不幸的是,AsyncTask强制您重写doInBackground(字符串…文件名)-它将一系列字符串作为文件名。我可能会以某种方式序列化u

我正在开发一个应用程序,可以从设备(或者dropbox或驱动器)上的几个.json文件中读取数据

用户使用操作获取内容意图选择这些文件。此意图返回所选文件的URI,我从中获取路径,这些路径被发送到AsyncTask以在后台加载

在安卓4.4之前,它工作得很好。现在,某些内容选择器(尤其是android自己的“下载”活动)返回的uri不包含实际的文件名或路径

不幸的是,AsyncTask强制您重写doInBackground(字符串…文件名)-它将一系列字符串作为文件名。我可能会以某种方式序列化uri,并将它们在filenames参数中传递给该方法,但现在我认为这显然不是目的

因此,这促使我提出一个问题:有更好的方法吗?


允许用户在KitKat中选择和加载一系列文件的正确方法是什么,而不是使用
AsyncTask
。您可以使用
AsyncTask
。这将把
doInBackground(String…args)
更改为
doInBackground(URI…args)
。这将要求对所有文件路径使用URI而不是字符串

如果要使用非泛型AsyncTask类,则必须使用
doInBackground(Object…args)
方法(非类型安全)

但是,使用
AsyncTask
类可以指定类型参数
Params
doInBackground(Params…args)
中的类型相关,
Progress
progressupdate(Progress…args)中的varargs类型相关
Result
protectedresult doInBackground
的返回类型以及
protectedvoid onPostExecute(Result arg)
的参数类型相关


在这种情况下,最好使用泛型类型,因为它们没有运行时错误(但不是编译时错误)。对于传递类型对象引用的非泛型AsyncTask,情况并非如此。

为什么必须使用
doInBackground(String…
?您可以使用
AsyncTask
,这要求您使用
doInBackground(URI…
)。您可以对所有文件路径使用URI而不是字符串。@iamreptar-我不知道。这可能就是我的答案!伟大的我已经提交了评论作为一个解决方案,并提供了额外的细节。这是有潜力的,但最终我无法让它工作。不确定这是否是“正确”的答案,但它确实教会了我如何更好地工作。