如何将数据绑定到本地JSON文件中的回收库
我有一个学习项目,需要从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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论