我有一个PHP脚本,该脚本能够自动查找文件夹并将其名称作为字符串发送给客户端,以便可以在innerHTML
按钮中使用它们。我想在Android应用程序中使用Android Studio和Kotlin进行完全相同的操作,但是我没有找到任何特定的方法来完成该操作。
以下是获取所有文件夹名称并将其存储为数组的PHP代码:
$_SESSION['$folders'] =[] #initiates array
$_SESSION['$folders'] = array_filter(glob('*'), 'is_dir'); #finds subfolders in the root folder and stores their names
但是,文件夹和PHP脚本都在同一目录中,因此,除了array_filter
及其消除参数glob('*')
和is_dir
之外,不需要进一步的路径字符串处理在上面的代码中,这就是我在Kotlin中寻找的“魔术”。
由于似乎我在这里没有足够的声誉而无法发送图片。
答案 0 :(得分:0)
在Android中,您应严格指定要查看的文件夹的路径。
起点可以是 provisioner "local-exec" {
command = <<EOT
export KUBECONFIG=/root/.kube/config
kubectl create -f resource1.yml
kubectl create -f resource2.yml
unset KUBECONFIG
EOT
}
-主共享/外部存储目录。
然后,您可以使用方法Environment.getExternalStorageDirectory()
获取文件列表。如果您需要以某种方式对其进行过滤(例如仅具有目录),则可以添加 FileFilter :dir.listFiles()
另一个重要的事情是您必须具有读取外部storange的权限。因此,您应该添加到您的 Manifest.xml :
dir.listFiles(FileFilter { it.isDirectory })
从Android 6.0开始,您还应该请求此权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
并在 Fragment.onRequestPermissionsResult 方法中处理结果。
我创建了如何一起使用的示例。 您需要创建活动并在其中添加一个片段: DirListFragment
Fragment.requestPermissions(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), READ_STORAGE_RC)
DirListAdapter
class DirListFragment : Fragment() {
private val adapter by lazy { DirListAdapter { dir = it } }
private var dir: File by observable(Environment.getExternalStorageDirectory()) { _, _, _ -> onNewParent() }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
inflater.inflate(R.layout.fragment_dir_list, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
checkPermissionReadStorage(requireActivity())
list.adapter = adapter
up.setOnClickListener { dir = dir.parentFile }
onNewParent()
}
private fun onNewParent() {
parent.text = dir.absolutePath
adapter.items = dir.listFiles(FileFilter { it.isDirectory })?.toList() ?: emptyList()
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == READ_STORAGE_RC && permissionGranted(requireActivity())) onNewParent()
}
private fun checkPermissionReadStorage(activity: Activity) {
if (!permissionGranted(activity)) {
requestPermissions(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), READ_STORAGE_RC)
}
}
private fun permissionGranted(activity: Activity) =
ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
private companion object {
const val READ_STORAGE_RC = 123
}
}
fragment_dir_list.xml
class DirListAdapter(private val clickListener: (file: File) -> Unit) :
RecyclerView.Adapter<DirListAdapter.ViewHolder>() {
var items by Delegates.observable(listOf<File>()) { _, _, _ -> notifyDataSetChanged() }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(parent)
override fun getItemCount() = items.size
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.caption.text = items[position].name
holder.caption.setOnClickListener { clickListener(items[position]) }
}
class ViewHolder(parent: ViewGroup) : RecyclerView.ViewHolder
(LayoutInflater.from(parent.context).inflate(android.R.layout.simple_list_item_1, parent, false)) {
val caption: TextView = itemView.findViewById(android.R.id.text1)
}
}
希望这将有助于您了解基础。