如何将数据绑定到本地JSON文件中的回收库

发布于 2025-02-13 09:13:56 字数 5716 浏览 0 评论 0原文

我有一个学习项目,需要从JSON本地文件中获取数据,现在我面临着带有滑行的Recyclerview上的图像的问题,照片中没有显示。除此之外,我不得不将另一个数据从JSON文件发送到 delectActivity ,但我仍然不知道它可以接近它,任何建议吗?

这是示例JSON文件的3个列表;

{
    "users": [{
            "username": "JakeWharton",
            "name": "Jake Wharton",
            "avatar": "@drawable/user1",
            "company": "Google, Inc.",
            "location": "Pittsburgh, PA, USA",
            "repository": 102,
            "follower": 56995,
            "following": 12
        },
        {
            "username": "amitshekhariitbhu",
            "name": "AMIT SHEKHAR",
            "avatar": "@drawable/user2",
            "company": "@MindOrksOpenSource",
            "location": "New Delhi, India",
            "repository": 37,
            "follower": 5153,
            "following": 2
        },
        {
            "username": "romainguy",
            "name": "Romain Guy",
            "avatar": "@drawable/user3",
            "company": "Google",
            "location": "California",
            "repository": 9,
            "follower": 7972,
            "following": 0
        }
    ]
}

这是模型类;

@Parcelize
data class User(
    val name: String,
    val username: String,
    val company: String,
    val avatar: String,
    val location: String,
    val repository: Int,
    val follower: Int,
    val following: Int
) : Parcelable

适配器;

class CostumAdapter(
    private var context: Context,
    private var userName: ArrayList<String>,
    private var name: ArrayList<String>,
    private var avatar: ArrayList<String>,
    private var company: ArrayList<String>,
    private var location: ArrayList<String>,
    private var repository: ArrayList<Int>,
    private var followers: ArrayList<Int>,
    private var following: ArrayList<Int>
) : RecyclerView.Adapter<CostumAdapter.MyViewHolder>() {

    inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        var imageJs: ImageView = itemView.findViewById<View>(R.id.iv_img_json) as ImageView
        var nameUser: TextView = itemView.findViewById<View>(R.id.tv_name_json) as TextView
        var userName: TextView = itemView.findViewById<View>(R.id.tv_username_json) as TextView
        var company: TextView = itemView.findViewById<View>(R.id.tv_company_json) as TextView

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_rv_json, parent, false)
        return MyViewHolder(view)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.nameUser.text = name[position]
        holder.userName.text = userName[position]
        holder.company.text = company[position]
        Glide.with(this.context)
            .load(avatar[position])
            .circleCrop()
            .into(holder.imageJs)

    }

    override fun getItemCount(): Int {
        return name.size
    }
}

这是主要活动;


class JsonDataActivity : AppCompatActivity() {

    var userName: ArrayList<String> = ArrayList()
    var name: ArrayList<String> = ArrayList()
    var avatar: ArrayList<String> = ArrayList()
    var company: ArrayList<String> = ArrayList()
    var location: ArrayList<String> = ArrayList()
    var repository: ArrayList<Int> = ArrayList()
    var followers: ArrayList<Int> = ArrayList()
    var following: ArrayList<Int> = ArrayList()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_json_data)

        val recyclerView = findViewById<RecyclerView>(R.id.rv_jsondata)
        val linearLayoutManager = LinearLayoutManager(applicationContext)
        recyclerView.setHasFixedSize(true)
        recyclerView.layoutManager = linearLayoutManager

        try {
            val obj = JSONObject(loadJSONFromAsset())
            val userArray = obj.getJSONArray("users")
            for (i in 0 until userArray.length()) {
                val userDetail = userArray.getJSONObject(i)
                userName.add(userDetail.getString("username"))
                name.add(userDetail.getString("name"))
                avatar.add(userDetail.getString("avatar"))
                company.add(userDetail.getString("company"))
                location.add(userDetail.getString("location"))
                repository.add(userDetail.getInt("repository"))
                followers.add(userDetail.getInt("follower"))
                following.add(userDetail.getInt("following"))
            }
        } catch (e: JSONException) {
            e.printStackTrace()
        }

        val costumAdapter = CostumAdapter(
            this@JsonDataActivity,
            userName,
            name,
            avatar,
            company,
            location,
            repository,
            followers,
            following
        )
        recyclerView.adapter = costumAdapter

    }

    private fun loadJSONFromAsset(): String {
        val json: String?
        try {
            val inputStream = assets.open("githubuser.json")
            val size = inputStream.available()
            val buffer = ByteArray(size)
            val charset: Charset = Charsets.UTF_8
            inputStream.read(buffer)
            inputStream.close()
            json = String(buffer, charset)
        } catch (ex: IOException) {
            ex.printStackTrace()
            return ""
        }
        return json
    }
}

非常感谢您提供的任何帮助。

I had one learning project, that requires to get data from JSON local file, now I faced a problem with images on recyclerView loaded with Glide, the photos were not showing in it. Other than that, I had to send another data from the JSON file to DetailsActivity, and I still didn't figure it the way to approach it, any suggestions??

here are the 3 lists of sample JSON files;

{
    "users": [{
            "username": "JakeWharton",
            "name": "Jake Wharton",
            "avatar": "@drawable/user1",
            "company": "Google, Inc.",
            "location": "Pittsburgh, PA, USA",
            "repository": 102,
            "follower": 56995,
            "following": 12
        },
        {
            "username": "amitshekhariitbhu",
            "name": "AMIT SHEKHAR",
            "avatar": "@drawable/user2",
            "company": "@MindOrksOpenSource",
            "location": "New Delhi, India",
            "repository": 37,
            "follower": 5153,
            "following": 2
        },
        {
            "username": "romainguy",
            "name": "Romain Guy",
            "avatar": "@drawable/user3",
            "company": "Google",
            "location": "California",
            "repository": 9,
            "follower": 7972,
            "following": 0
        }
    ]
}

here's the model class;

@Parcelize
data class User(
    val name: String,
    val username: String,
    val company: String,
    val avatar: String,
    val location: String,
    val repository: Int,
    val follower: Int,
    val following: Int
) : Parcelable

the adapter ;

class CostumAdapter(
    private var context: Context,
    private var userName: ArrayList<String>,
    private var name: ArrayList<String>,
    private var avatar: ArrayList<String>,
    private var company: ArrayList<String>,
    private var location: ArrayList<String>,
    private var repository: ArrayList<Int>,
    private var followers: ArrayList<Int>,
    private var following: ArrayList<Int>
) : RecyclerView.Adapter<CostumAdapter.MyViewHolder>() {

    inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        var imageJs: ImageView = itemView.findViewById<View>(R.id.iv_img_json) as ImageView
        var nameUser: TextView = itemView.findViewById<View>(R.id.tv_name_json) as TextView
        var userName: TextView = itemView.findViewById<View>(R.id.tv_username_json) as TextView
        var company: TextView = itemView.findViewById<View>(R.id.tv_company_json) as TextView

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_rv_json, parent, false)
        return MyViewHolder(view)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.nameUser.text = name[position]
        holder.userName.text = userName[position]
        holder.company.text = company[position]
        Glide.with(this.context)
            .load(avatar[position])
            .circleCrop()
            .into(holder.imageJs)

    }

    override fun getItemCount(): Int {
        return name.size
    }
}

here's the main activity ;


class JsonDataActivity : AppCompatActivity() {

    var userName: ArrayList<String> = ArrayList()
    var name: ArrayList<String> = ArrayList()
    var avatar: ArrayList<String> = ArrayList()
    var company: ArrayList<String> = ArrayList()
    var location: ArrayList<String> = ArrayList()
    var repository: ArrayList<Int> = ArrayList()
    var followers: ArrayList<Int> = ArrayList()
    var following: ArrayList<Int> = ArrayList()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_json_data)

        val recyclerView = findViewById<RecyclerView>(R.id.rv_jsondata)
        val linearLayoutManager = LinearLayoutManager(applicationContext)
        recyclerView.setHasFixedSize(true)
        recyclerView.layoutManager = linearLayoutManager

        try {
            val obj = JSONObject(loadJSONFromAsset())
            val userArray = obj.getJSONArray("users")
            for (i in 0 until userArray.length()) {
                val userDetail = userArray.getJSONObject(i)
                userName.add(userDetail.getString("username"))
                name.add(userDetail.getString("name"))
                avatar.add(userDetail.getString("avatar"))
                company.add(userDetail.getString("company"))
                location.add(userDetail.getString("location"))
                repository.add(userDetail.getInt("repository"))
                followers.add(userDetail.getInt("follower"))
                following.add(userDetail.getInt("following"))
            }
        } catch (e: JSONException) {
            e.printStackTrace()
        }

        val costumAdapter = CostumAdapter(
            this@JsonDataActivity,
            userName,
            name,
            avatar,
            company,
            location,
            repository,
            followers,
            following
        )
        recyclerView.adapter = costumAdapter

    }

    private fun loadJSONFromAsset(): String {
        val json: String?
        try {
            val inputStream = assets.open("githubuser.json")
            val size = inputStream.available()
            val buffer = ByteArray(size)
            val charset: Charset = Charsets.UTF_8
            inputStream.read(buffer)
            inputStream.close()
            json = String(buffer, charset)
        } catch (ex: IOException) {
            ex.printStackTrace()
            return ""
        }
        return json
    }
}

I really appreciate any help you can provide.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文