Как загрузить видео из JSON в Webview (с помощью Iframe) с помощью Kotlin - PullRequest
0 голосов
/ 11 октября 2019

В настоящее время я делаю несколько приложений, в которых мне нужно использовать файлы JSON и Recyclerviews. На данный момент проблема для меня заключается в том, что я не могу найти решение в Интернете для загрузки видео в веб-обозрение.

Слишком много часов искал в Интернете.

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        mainRecyclerView.layoutManager = LinearLayoutManager(this)
        val myVideoView = findViewById<WebView>(R.id.webVideoView)
        myVideoView.webViewClient = object: WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
                view?.loadUrl(url)
                return true
            }
        }
        myVideoView.loadUrl("https://www.scorebat.com/embed/")

        fetchJSON()
    }

    fun fetchJSON(){
        val url = "https://www.scorebat.com/video-api/v1/"
        val request = Request.Builder().url(url).build()
        val client = OkHttpClient()
        client.newCall(request).enqueue(object: Callback{
            override fun onResponse(call: Call, response: Response) {
                val body = response.body()?.string()
                println(body)
                val gson = GsonBuilder().create()
                val mainCollection = gson.fromJson(body, Array<Match>::class.java)

                runOnUiThread {
                    mainRecyclerView.adapter = MainAdapter(mainCollection)
                }
            }

            override fun onFailure(call: Call, e: IOException) {
                println("Failed to execute")
            }
        })
    }
class MainAdapter(val mainCollection: Array<Match>) : RecyclerView.Adapter<CustomViewHolder>(){

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

    override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
        val positioner = mainCollection.get(position)
        holder.view.sortTitle.text = positioner.competition.name
        holder.view.textTitle.text = positioner.title
        val thumbnail = positioner.thumbnail
        Picasso.with(holder.view.context).load(thumbnail).into(holder.view.thumbnailImage)
        if(positioner.date.contains("T")){
            var localDate = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss+SSSS").parse(positioner.date)
            holder.view.dateTitle.text = SimpleDateFormat("dd-MM-yyyy '-' HH:mm").format(localDate)
        }
        holder.view.side1.text = positioner.side1.name
        holder.view.side2.text = positioner.side2.name
        /*holder.view.webVideoView.loadData("<iframe src=\"https://www.scorebat.com/embed/g/786554/?s=2\" width='300' height='200' allowfullscreen" +
                " allow='autoplay; fullscreen' overflow:hidden;display:block;'class='_scorebatEmbeddedPlayer_'></iframe>", "text/html", "utf-8")*/
    }

    override fun getItemCount(): Int {
        return 1
    }
}

class CustomViewHolder(val view: View, var video: Match?= null): RecyclerView.ViewHolder(view){
    companion object{
        val VIDEO_TITLE_KEY = "VIDEO_TITLE"
        val VIDEO_URL_KEY = "VIDEO_URL"
    }
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/sortTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="Sort Title"
        android:textAlignment="center"
        android:textSize="16sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="Match Title"
        android:textAlignment="center"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/sortTitle" />

    <WebView
        android:id="@+id/webVideoView"
        android:layout_width="300dp"
        android:layout_height="200dp"
        android:layout_marginTop="10dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.495"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textTitle" />

    <TextView
        android:id="@+id/dateTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="65dp"
        android:text="Date"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/webVideoView" />

    <Button
        android:id="@+id/side1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="Side1"
        app:layout_constraintEnd_toStartOf="@+id/dateTitle"
        app:layout_constraintStart_toStartOf="@+id/webVideoView"
        app:layout_constraintTop_toBottomOf="@+id/dateTitle" />

    <Button
        android:id="@+id/side2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="Side2"
        app:layout_constraintEnd_toEndOf="@+id/webVideoView"
        app:layout_constraintStart_toEndOf="@+id/dateTitle"
        app:layout_constraintTop_toBottomOf="@+id/dateTitle" />

    <WebView
        android:id="@+id/statisticsView"
        android:layout_width="300dp"
        android:layout_height="200dp"
        android:layout_marginTop="10dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/side2" />

    <ImageView
        android:id="@+id/thumbnailImage"
        android:layout_width="300dp"
        android:layout_height="200dp"
        android:layout_marginTop="10dp"
        android:onClick="thumbnailClicked"
        android:visibility="invisible"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textTitle"
        app:srcCompat="@mipmap/ic_launcher" />

    <ImageButton
        android:id="@+id/pauseButton"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:adjustViewBounds="true"
        android:onClick="pauseClicked"
        android:scaleType="fitCenter"
        app:layout_constraintEnd_toEndOf="@+id/webVideoView"
        app:layout_constraintStart_toStartOf="@+id/webVideoView"
        app:layout_constraintTop_toBottomOf="@+id/webVideoView"
        app:srcCompat="@drawable/iconfinder_button_pause_67775" />

    <ImageButton
        android:id="@+id/playButton"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:adjustViewBounds="true"
        android:onClick="playClicked"
        android:scaleType="fitCenter"
        app:layout_constraintEnd_toEndOf="@+id/webVideoView"
        app:layout_constraintStart_toStartOf="@+id/webVideoView"
        app:layout_constraintTop_toBottomOf="@+id/webVideoView"
        app:srcCompat="@drawable/iconfinder_button_play_67776" />

</androidx.constraintlayout.widget.ConstraintLayout>

В настоящее время на экране появляется полоса загрузки и белый фон. Похоже, что он еще не вписывается в мой веб-просмотр, но это, вероятно, потому, что фиксированная высота и вес внутри детали из файла JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...