Reputation: 9
I am trying to get array of JSONOBJECT from articles but it shows error. error is unresolved reference:it
the line which shows error is:
val newsJsonArray =it.getJSONArray("articles")
here is code of main activity:
`package com.example.newsfresh
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.android.volley.Request
import com.android.volley.Response
import com.android.volley.toolbox.JsonObjectRequest
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity(), NewsItemClicked {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// RecyclerView.LayoutManager=LinearLayoutManager
recyclerView.layoutManager=LinearLayoutManager(this)
val items = fetchData()
val adapter= NewsListAdapter(items,this)
recyclerView.adapter=adapter
}
private fun fetchData(){
val url = "https://newsapi.org/v2/top-headlines?country=In&category=business&apiKey=API_KEY"
val jsonObjectRequest = JsonObjectRequest(
Request.Method.GET, url, null,
{ response ->
val newsJsonArray =it.getJSONArray("articles")
},
{ error ->
// TODO: Handle error
}
)
// Access the RequestQueue through your singleton class.
MySingleton.getInstance(this).addToRequestQueue(jsonObjectRequest)
}
override fun onItemClicked(item: String) {
Toast.makeText(this,"clicked item is$item",Toast.LENGTH_LONG).show()
}
}`
the code for adapter class:`
package com.example.newsfresh
import android.os.Parcel
import android.os.Parcelable
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class NewsListAdapter(private val items:ArrayList<String>,private val listener:NewsItemClicked) :RecyclerView.Adapter<NewsViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NewsViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_news,parent,false)
val viewHolder = NewsViewHolder(view)
view.setOnClickListener {
listener.onItemClicked(items[viewHolder.adapterPosition])
}
return viewHolder
}
override fun onBindViewHolder(holder: NewsViewHolder, position: Int) {
val currentItem = items[position]
holder.titleView.text=currentItem
}
override fun getItemCount(): Int {
return items.size
}
}
class NewsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val titleView:TextView = itemView.findViewById(R.id.title)
}
interface NewsItemClicked{
fun onItemClicked(item:String)
}
`
here is image for referenceenter image description here
Upvotes: 1
Views: 1934
Reputation: 8191
it
is the default name assigned if you don't assign another name, which you've done with { response ->
so you should be using response.whatever
:
val jsonObjectRequest = JsonObjectRequest(
Request.Method.GET, url, null,
{ response ->
val newsJsonArray =response.getJSONArray("articles")
},
{ error ->
// TODO: Handle error
}
)
or
val jsonObjectRequest = JsonObjectRequest(
Request.Method.GET, url, null,
{
val newsJsonArray = it.getJSONArray("articles")
},
{ error ->
// TODO: Handle error
}
)
Upvotes: 1