在Android 4.4+;
我正在开发一个应用程序,可以从设备(或者dropbox或驱动器)上的几个.json文件中读取数据 用户使用操作获取内容意图选择这些文件。此意图返回所选文件的URI,我从中获取路径,这些路径被发送到AsyncTask以在后台加载 在安卓4.4之前,它工作得很好。现在,某些内容选择器(尤其是android自己的“下载”活动)返回的uri不包含实际的文件名或路径 不幸的是,AsyncTask强制您重写doInBackground(字符串…文件名)-它将一系列字符串作为文件名。我可能会以某种方式序列化uri,并将它们在filenames参数中传递给该方法,但现在我认为这显然不是目的 因此,这促使我提出一个问题:有更好的方法吗?在Android 4.4+;,android,android-asynctask,filechooser,Android,Android Asynctask,Filechooser,我正在开发一个应用程序,可以从设备(或者dropbox或驱动器)上的几个.json文件中读取数据 用户使用操作获取内容意图选择这些文件。此意图返回所选文件的URI,我从中获取路径,这些路径被发送到AsyncTask以在后台加载 在安卓4.4之前,它工作得很好。现在,某些内容选择器(尤其是android自己的“下载”活动)返回的uri不包含实际的文件名或路径 不幸的是,AsyncTask强制您重写doInBackground(字符串…文件名)-它将一系列字符串作为文件名。我可能会以某种方式序列化u
允许用户在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-我不知道。这可能就是我的答案!伟大的我已经提交了评论作为一个解决方案,并提供了额外的细节。这是有潜力的,但最终我无法让它工作。不确定这是否是“正确”的答案,但它确实教会了我如何更好地工作。