从 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/tojibR.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 插入中删除不需要的字符

Android Studio 无法从 API 获取 Json

Android Studio 中的 JSON 语言注入?

Android Studio 中的 Json 解析问题