我自己找到了解决方案。它很容易理解和实现,只需要 JSON 的知识。首先,从我的网站目录中查看这张图片:
“event1”、“event2”文件夹是专辑名称。我们可以根据需要创建任意数量。
“getfolders文件很重要。内容:
{
"test":[
{
"sub":"event1",
"content":"https://i1.wp.com/www.downloadinformer.com/wp-content/uploads/2017/03/AMPFB.jpg?w=1366",
"param":"1.php"
},
{
"sub":"event2",
"content":"myimageurl",
"param":"myphpfilenamewithextension"
}
]
}
我们在此处存储专辑名称,您可以在“子”字段中看到。 “content”字段包含指向专辑缩略图的链接,“param”包含相应 PHP 文件的名称。不用担心,您不需要学习 PHP。这是一个现成的脚本。
1.php
<?php
$indir = array_filter(scandir('event1'), function($item) {
return $item[0] !== '.';
});
echo json_encode($indir);
?>
这个 PHP 文件有什么作用? 它列出了指定文件夹中存在的所有文件的名称。如您所见,我们已将“event1”指定为该 PHP 文件中的文件夹名称。因此它将以 JSON 格式返回所有图像的名称。不要忘记在“getfolders”文件的“param”字段中指定这个 PHP 文件。
好的。所以这是一种算法。如果您有一些困惑,请重新阅读。现在我将展示一些代码。
我做了两个活动(不喜欢片段)。一个显示相册,第二个显示其中的图像。
Activity 1-> 解析 getfolders 文件并检索我们之前指定的相册。
专辑标题:上述 JSON 的 sub 字段
, 专辑缩略图:上述 JSON 的 content 字段
,(对用户隐藏)图像名称列表:param 字段
因此,我们可以使用此信息在 Recyclerview 中显示它。现在我们为其项目指定 OnClickListener。
On Click Of An Item-> 使用 Intent 启动第二个活动并传递专辑名称,该名称本质上是我们服务器上的文件夹名称。因此,我们可以访问包含图像的文件夹。同时传递“参数”字段值。这给了我们一个网址“www.mywebsite.com/..../alreadyspecifieddirectory/1.php”
Activity->2 实现一个 GridLayoutManager 向用户显示图片。使用getIntent() 检索先前传递的值。首先,我们需要执行这个 PHP 文件并解析 JSON 内容。这是一些代码:
private void loadJSON(){
StringRequest stringRequest = new StringRequest(Request.Method.GET,
URL_DATA,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
for (int i=2; i<jsonObject.length()+2;i++){
String value =jsonObject.getString(String.valueOf(i));
if (value.length()!=0) {
ListItem item = new ListItem(value, mParam1+"/"+value, "nothing");
listItems.add(item);
}
}
adapter = new PhotoLibraryAdapter(Photos.this,listItems,photosList,true);
photosList.setAdapter(adapter);
progressBar.setVisibility(View.GONE);
} catch (Exception e) {progressBar.setVisibility(View.GONE);}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressBar.setVisibility(View.GONE);
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
请注意,我们从 2 开始 for 循环,因为 PHP 文件从索引 2 返回值,因为值 0 和值 1 是废值并命名为“。”和“..”分别。
因此我们得到了可以通过 url 传递的图像名称:
"www.mywebsite.com/.../albumnameretrieveedearlier/imagenamegivenbyPHPfile"
并将其传递给适配器,以便我们可以使用 Picasso 库加载图像。
就是这样!如果您有任何问题,请随时在 cmets 中提问。
编辑 1: 外观如下: