RecyclerView:电影图像不显示
RecyclerView : movie image not displaying
我正在尝试使用 asynctaskloader 获取数据并使用 recyclerview 在片段中显示图像。
以前我这样做过,然后我没有得到 error.I 我不确定为什么会这样。
但我的图像没有显示
当我使用毕加索时,这是我在 logcat
D/Picasso: Main created [R4] Request{http://image.tmdb.org/t/p/w342/8UlWHLMpgZm9bx6QYh0NFoq67TZ.jpg}
D/Picasso: Dispatcher enqueued [R4]+1ms
D/Picasso: Hunter executing [R4]+2ms
D/Picasso: Main created [R5] Request{http://image.tmdb.org/t/p/w342/dWSnsAGTfc8U27bWsy2RfwZs0Bs.jpg}
D/Picasso: Dispatcher enqueued [R5]+1ms
D/Picasso: Hunter executing [R5]+1ms
D/EGL_emulation: eglMakeCurrent: 0xddc5e660: ver 2 0 (tinfo 0xe3e7ec40)
D/EGL_emulation: eglMakeCurrent: 0xddc5e660: ver 2 0 (tinfo 0xe3e7ec40)
D/Picasso: Dispatcher retrying [R4]+612ms
D/Picasso: Hunter executing [R4]+612ms
D/Picasso: Dispatcher retrying [R5]+609ms
D/Picasso: Hunter executing [R5]+609ms
D/Picasso: Dispatcher retrying [R5]+1167ms
D/Picasso: Hunter executing [R5]+1168ms
D/Picasso: Dispatcher retrying [R4]+1175ms
D/Picasso: Hunter executing [R4]+1176ms
D/Picasso: Dispatcher batched [R5]+1171ms for error
D/Picasso: Dispatcher batched [R4]+1179ms for error
D/Picasso: Dispatcher delivered [R5]+1413ms, [R4]+1419ms
D/Picasso: Main errored [R5]+1413ms HTTP 504
D/Picasso: Main errored [R4]+1419ms HTTP 504
片段类:
package com.example.srilakshmibomireddy.movies
import android.content.Context
import android.content.Context.INPUT_METHOD_SERVICE
import android.net.ConnectivityManager
import android.net.Uri
import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v4.content.Loader
import android.support.v7.widget.GridLayoutManager
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.Toast
import org.json.JSONException
import org.json.JSONObject
import java.util.ArrayList
class Popular : Fragment(),android.support.v4.app.LoaderManager.LoaderCallbacks<String>{
val popular:String = "popular"
lateinit var recyclerView: RecyclerView
lateinit var layoutManager:GridLayoutManager
val list = ArrayList<MoviesData>()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view: View = inflater.inflate(R.layout.fragment_popular, container, false)
val inputMethodManager = activity!!.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
val connectivityManager = activity!!.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkInfo = connectivityManager.activeNetworkInfo
if (networkInfo != null && networkInfo.isConnected && activity != null) {
GetMovies(context!!,popular)
} else {
Toast.makeText(activity, "please check network connectivity", Toast.LENGTH_SHORT).show()
}
recyclerView = view.findViewById(R.id.popular_posters)
layoutManager = GridLayoutManager(context, 2)
layoutManager.setOrientation(GridLayoutManager.VERTICAL)
recyclerView.layoutManager = layoutManager
recyclerView.setHasFixedSize(true)
val moviesadapter = MoviesAdapter(context!!)
moviesadapter.movieslist = list
recyclerView.adapter = moviesadapter
loaderManager.initLoader(0, null, this)
return view
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val connectivityManager = activity!!.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkInfo = connectivityManager.activeNetworkInfo
if (networkInfo != null && networkInfo.isConnected) {
GetMovies(context!!,popular)
} else {
Toast.makeText(activity, "please check network connectivity", Toast.LENGTH_SHORT).show()
}
}
override fun onCreateLoader(p0: Int, p1: Bundle?): Loader<String> {
return GetMovies(context!!,popular)
}
override fun onLoaderReset(p0: Loader<String>) {
}
override fun onLoadFinished(p0: Loader<String>, data: String?) {
val moviesadapter = MoviesAdapter(context!!)
if (data == null) {
Toast.makeText(context, "No Data Fetched", Toast.LENGTH_SHORT).show()
return
}
try {
val jsonObject = JSONObject(data)
val jsonArray1 = jsonObject.getJSONArray("results")
for (i in 0 until jsonArray1.length()) {
val jsonObject1 = jsonArray1.getJSONObject(i)
val title = jsonObject1.getString("title")
val popularity = jsonObject1.getString("popularity")
val poster = jsonObject1.optString("poster_path").toString()
val orgTitle = jsonObject1.getString("original_title")
val release = jsonObject1.getString("release_date")
val overview = jsonObject1.getString("overview")
val rating = jsonObject1.getString("vote_average")
val id = jsonObject1.getString("id")
val moviesdata = MoviesData(title, popularity, poster, orgTitle, release, overview, rating, id)
list.add(moviesdata)
}
moviesadapter.movieslist = list
recyclerView.adapter = moviesadapter
} catch (e: JSONException) {
e.printStackTrace()
}
}
}
片段资源文件
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
tools:context="com.example.srilakshmibomireddy.moviesdetailsapp.Fragments.Popular">
<android.support.v7.widget.RecyclerView
app:layoutManager="android.support.v7.widget.GridLayoutManager"
android:id="@+id/popular_posters"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
我的适配器:
package com.example.srilakshmibomireddy.movies
import android.content.Context
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.Toast
import com.squareup.picasso.Picasso
class MoviesAdapter : RecyclerView.Adapter<MoviesAdapter.MyViewHolder> {
var context: Context
var movieslist: List<MoviesData>? = null
set(value) {
field = value
}
constructor(context: Context) : super() {
this.context = context
}
override fun getItemCount(): Int {
return movieslist!!.size
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
var moviedata : MoviesData = movieslist!!.get(position)
var s : String ="http://image.tmdb.org/t/p/w342".plus(moviedata.poster)
Toast.makeText(context,s,Toast.LENGTH_SHORT).show()
Picasso.get().load(s).into(holder.movie_poster)
}
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): MyViewHolder {
var view :View = LayoutInflater.from(p0.context).inflate(R.layout.movies_adapter,p0,false)
return MyViewHolder(view)
}
class MyViewHolder(view :View) :RecyclerView.ViewHolder(view) {
var movie_poster : ImageView = view.findViewById(R.id.movie_poster)
}
}
适配器资源文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/movie_poster"
android:layout_width="match_parent"
android:src="@mipmap/ic_launcher"
android:layout_height="300dp"
android:padding="2dp"
android:scaleType="fitXY"
android:contentDescription="@string/movie_poster"/>
</LinearLayout>
有人可以帮我吗?
当我不得不在图像中使用“Https”时,我正在使用“Http”link
改变
var s : String ="http://image.tmdb.org/t/p/w342".plus(moviedata.poster)
至
var s : String ="https://image.tmdb.org/t/p/w342".plus(moviedata.poster)
解决了我的问题
我正在尝试使用 asynctaskloader 获取数据并使用 recyclerview 在片段中显示图像。 以前我这样做过,然后我没有得到 error.I 我不确定为什么会这样。
但我的图像没有显示
当我使用毕加索时,这是我在 logcat
D/Picasso: Main created [R4] Request{http://image.tmdb.org/t/p/w342/8UlWHLMpgZm9bx6QYh0NFoq67TZ.jpg}
D/Picasso: Dispatcher enqueued [R4]+1ms
D/Picasso: Hunter executing [R4]+2ms
D/Picasso: Main created [R5] Request{http://image.tmdb.org/t/p/w342/dWSnsAGTfc8U27bWsy2RfwZs0Bs.jpg}
D/Picasso: Dispatcher enqueued [R5]+1ms
D/Picasso: Hunter executing [R5]+1ms
D/EGL_emulation: eglMakeCurrent: 0xddc5e660: ver 2 0 (tinfo 0xe3e7ec40)
D/EGL_emulation: eglMakeCurrent: 0xddc5e660: ver 2 0 (tinfo 0xe3e7ec40)
D/Picasso: Dispatcher retrying [R4]+612ms
D/Picasso: Hunter executing [R4]+612ms
D/Picasso: Dispatcher retrying [R5]+609ms
D/Picasso: Hunter executing [R5]+609ms
D/Picasso: Dispatcher retrying [R5]+1167ms
D/Picasso: Hunter executing [R5]+1168ms
D/Picasso: Dispatcher retrying [R4]+1175ms
D/Picasso: Hunter executing [R4]+1176ms
D/Picasso: Dispatcher batched [R5]+1171ms for error
D/Picasso: Dispatcher batched [R4]+1179ms for error
D/Picasso: Dispatcher delivered [R5]+1413ms, [R4]+1419ms
D/Picasso: Main errored [R5]+1413ms HTTP 504
D/Picasso: Main errored [R4]+1419ms HTTP 504
片段类:
package com.example.srilakshmibomireddy.movies
import android.content.Context
import android.content.Context.INPUT_METHOD_SERVICE
import android.net.ConnectivityManager
import android.net.Uri
import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v4.content.Loader
import android.support.v7.widget.GridLayoutManager
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.Toast
import org.json.JSONException
import org.json.JSONObject
import java.util.ArrayList
class Popular : Fragment(),android.support.v4.app.LoaderManager.LoaderCallbacks<String>{
val popular:String = "popular"
lateinit var recyclerView: RecyclerView
lateinit var layoutManager:GridLayoutManager
val list = ArrayList<MoviesData>()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view: View = inflater.inflate(R.layout.fragment_popular, container, false)
val inputMethodManager = activity!!.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
val connectivityManager = activity!!.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkInfo = connectivityManager.activeNetworkInfo
if (networkInfo != null && networkInfo.isConnected && activity != null) {
GetMovies(context!!,popular)
} else {
Toast.makeText(activity, "please check network connectivity", Toast.LENGTH_SHORT).show()
}
recyclerView = view.findViewById(R.id.popular_posters)
layoutManager = GridLayoutManager(context, 2)
layoutManager.setOrientation(GridLayoutManager.VERTICAL)
recyclerView.layoutManager = layoutManager
recyclerView.setHasFixedSize(true)
val moviesadapter = MoviesAdapter(context!!)
moviesadapter.movieslist = list
recyclerView.adapter = moviesadapter
loaderManager.initLoader(0, null, this)
return view
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val connectivityManager = activity!!.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkInfo = connectivityManager.activeNetworkInfo
if (networkInfo != null && networkInfo.isConnected) {
GetMovies(context!!,popular)
} else {
Toast.makeText(activity, "please check network connectivity", Toast.LENGTH_SHORT).show()
}
}
override fun onCreateLoader(p0: Int, p1: Bundle?): Loader<String> {
return GetMovies(context!!,popular)
}
override fun onLoaderReset(p0: Loader<String>) {
}
override fun onLoadFinished(p0: Loader<String>, data: String?) {
val moviesadapter = MoviesAdapter(context!!)
if (data == null) {
Toast.makeText(context, "No Data Fetched", Toast.LENGTH_SHORT).show()
return
}
try {
val jsonObject = JSONObject(data)
val jsonArray1 = jsonObject.getJSONArray("results")
for (i in 0 until jsonArray1.length()) {
val jsonObject1 = jsonArray1.getJSONObject(i)
val title = jsonObject1.getString("title")
val popularity = jsonObject1.getString("popularity")
val poster = jsonObject1.optString("poster_path").toString()
val orgTitle = jsonObject1.getString("original_title")
val release = jsonObject1.getString("release_date")
val overview = jsonObject1.getString("overview")
val rating = jsonObject1.getString("vote_average")
val id = jsonObject1.getString("id")
val moviesdata = MoviesData(title, popularity, poster, orgTitle, release, overview, rating, id)
list.add(moviesdata)
}
moviesadapter.movieslist = list
recyclerView.adapter = moviesadapter
} catch (e: JSONException) {
e.printStackTrace()
}
}
}
片段资源文件
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
tools:context="com.example.srilakshmibomireddy.moviesdetailsapp.Fragments.Popular">
<android.support.v7.widget.RecyclerView
app:layoutManager="android.support.v7.widget.GridLayoutManager"
android:id="@+id/popular_posters"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
我的适配器:
package com.example.srilakshmibomireddy.movies
import android.content.Context
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.Toast
import com.squareup.picasso.Picasso
class MoviesAdapter : RecyclerView.Adapter<MoviesAdapter.MyViewHolder> {
var context: Context
var movieslist: List<MoviesData>? = null
set(value) {
field = value
}
constructor(context: Context) : super() {
this.context = context
}
override fun getItemCount(): Int {
return movieslist!!.size
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
var moviedata : MoviesData = movieslist!!.get(position)
var s : String ="http://image.tmdb.org/t/p/w342".plus(moviedata.poster)
Toast.makeText(context,s,Toast.LENGTH_SHORT).show()
Picasso.get().load(s).into(holder.movie_poster)
}
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): MyViewHolder {
var view :View = LayoutInflater.from(p0.context).inflate(R.layout.movies_adapter,p0,false)
return MyViewHolder(view)
}
class MyViewHolder(view :View) :RecyclerView.ViewHolder(view) {
var movie_poster : ImageView = view.findViewById(R.id.movie_poster)
}
}
适配器资源文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/movie_poster"
android:layout_width="match_parent"
android:src="@mipmap/ic_launcher"
android:layout_height="300dp"
android:padding="2dp"
android:scaleType="fitXY"
android:contentDescription="@string/movie_poster"/>
</LinearLayout>
有人可以帮我吗?
当我不得不在图像中使用“Https”时,我正在使用“Http”link
改变
var s : String ="http://image.tmdb.org/t/p/w342".plus(moviedata.poster)
至
var s : String ="https://image.tmdb.org/t/p/w342".plus(moviedata.poster)
解决了我的问题