在 Android Studio 中的 JSON 文件中的 ListView 中显示图像

Show image in ListView from JSON file in Android Studio

我想显示 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;
    }
}

问题:图像未显示在列表中。其他信息显示良好,但图像为空白。如果我在任何地方出错,谁能帮助我。

将图像添加到列表中时,您要添加可绘制 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()));