从 Android Studio 中的 JSON 文件在 ListView 中显示图像
Posted
技术标签:
【中文标题】从 Android Studio 中的 JSON 文件在 ListView 中显示图像【英文标题】:Show image in ListView from JSON file in Android Studio 【发布时间】:2021-04-03 02:48:38 【问题描述】:我想显示 JSON 文件中的成员列表。会员信息,例如姓名、位置、联系电话、图片等。所有信息都显示正常,但 会员图片 未显示。这里给出了检查所需的文件和编码。
JSON 文件
"names":[
"serialno":"1. ",
"memberimage":"@drawable/tojib",
"membername":"শেখ তজিবুল ইসলাম",
"farmacyname":"Farmacy1",
"mobileno":"01942717067",
"address":"Digholia, Lohagara, Narial"
,
"serialno":"2. ",
"memberimage":"@drawable/tojib",
"membername":"শেখ তজিবুল ইসলাম",
"farmacyname":"Farmacy2",
"mobileno":"01823987654",
"address":"Kumri, Lohagara, Narial"
,
"serialno":"3. ",
"memberimage":"@drawable/tojib",
"membername":"শেখ তজিবুল ইসলাম",
"farmacyname":"Farmacy3",
"mobileno":"01782345678",
"address":"Baira, Lohagara, Narial"
,
"serialno":"4. ",
"memberimage":"@drawable/tojib",
"membername":"শেখ তজিবুল ইসলাম",
"farmacyname":"Farmacy4",
"mobileno":"01943876543",
"address":"Lutia, Lohagara, Narial"
]
MainActivity.java
public class MainActivity extends AppCompatActivity
Toolbar toolbar;
ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = findViewById(R.id.toolBarId);
setSupportActionBar(toolbar);
listview=findViewById(R.id.listViewId);
try
JSONObject jsonObject=new JSONObject(loadJsonFile());
JSONArray jsonArray=jsonObject.getJSONArray("names");
HashMap<String,String> listItem;
ArrayList<HashMap<String,String>> listItems=new ArrayList<>();
for(int i=0; i<jsonArray.length();i++)
JSONObject obj=jsonArray.getJSONObject(i);
String serialno=obj.getString("serialno");
String memberimage=obj.getString("memberimage");
String farmacyname=obj.getString("farmacyname");
String membername=obj.getString("membername");
String mobileno=obj.getString("mobileno");
String address=obj.getString("address");
listItem=new HashMap<>();
listItem.put("serialno",serialno);
listItem.put("memberimage",memberimage);
listItem.put("farmacyname",farmacyname);
listItem.put("membername",membername);
listItem.put("mobileno",mobileno);
listItem.put("address",address);
listItems.add(listItem);
ListAdapter adapter=new SimpleAdapter(this,listItems,R.layout.main_list_item_layout,
new String[]"serialno","memberimage","membername","farmacyname","mobileno","address",
new int[]R.id.serialTextViewId,R.id.imageViewId,R.id.nameTextViewId,
R.id.shopNameTextViewId,R.id.mobileNoTextViewId,R.id.addressTextViewId);
listview.setAdapter(adapter);
catch (JSONException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
public String loadJsonFile() throws IOException
String json=null;
InputStream inputStream=this.getAssets().open("member.json");
int size=inputStream.available();
byte[] byteArray=new byte[size];
inputStream.read(byteArray);
inputStream.close();
json=new String(byteArray, "UTF-8");
return json;
问题:图像未显示在列表中。其他信息显示良好,但图像为空白。如果我在任何地方出错,任何人都可以帮助我。
【问题讨论】:
【参考方案1】:将图像添加到列表时,您要添加drawble id而不是可绘制字符串,即“@drawable/tojib”,如下所示:
String memberImageDrawable = obj.getString("memberimage");
memberImageDrawable = memberImageDrawable.substring(memberImageDrawable.indexOf("/")); //extract the String after @drawable/
String memberimage = Integer.toString(getApplicationContext().getResources().getIdentifier(memberImageDrawable, "drawable", getApplicationContext().getPackageName()));
【讨论】:
亲爱的大卫,非常感谢您的回答。不幸的是,问题仍然存在!如果我正确设置 memberimage 的值,请检查 JSON 文件,它应该是 @drawable/tojib 或 R.drawable.tojib 。我认为我在某个地方犯了一个小错误。 它应该是可绘制的 ID,我试图展示一个从字符串中获取它的解决方案,如果你尝试String memberimage = Integer.toString(getApplicationContext().getResources().getIdentifier("tojib:, "drawable", getApplicationContext().getPackageName()));
是否有效
亲爱的 David,显示 getIdentifier 参数的语法错误。你能检查一下吗
抱歉没有关闭引号String memberimage = Integer.toString(getApplicationContext().getResources().getIdentifier("tojib", "drawable", getApplicationContext().getPackageName()));
优秀的大卫!!它工作正常,问题已解决。我为这个问题度过了几天。现在得到了解决方案。非常感谢您的帮助。以上是关于从 Android Studio 中的 JSON 文件在 ListView 中显示图像的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Android Studio 的资源目录中读取 json 文件?
使用 JSON 将数据从 mysql 显示到 android studio
如何从 android studio 中的 SQLite 插入中删除不需要的字符