YouTube播放器视图未通过youtube API和频道导入显示视频

如何解决YouTube播放器视图未通过youtube API和频道导入显示视频

我正在使用youtube API顶部在android应用中导入youtube频道。我创建了MainActivity,Adapter,Video Datails类和另一个名为youtubePlay活动的活动。主要活动的xml由列表视图和另一个自定义布局组成,其中包含从json解析(标题,描述,缩略图显示的列表视图项的文本和图像。我已在activity_play_youtube中添加了YouTube播放器视图。但是点击列表中的视频后,该视频不会显示在youtube播放器视图中。 编码如图所示;

MainActivity.java

package com.currentmedia.channel;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolBox.StringRequest;
import com.android.volley.toolBox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

import com.currentmedia.channel.Adapter.MyCustomAdapter;
import com.currentmedia.channel.Model.VideoDetails;

import static android.widget.Toast.*;

public class MainActivity extends AppCompatActivity {
    //private static final String TAG = "Channel Activity";
    String API_Key = "[]";
    ListView listView;
    ArrayList<VideoDetails> videoDetailsArrayList;
    MyCustomAdapter myCustomAdapter;
    String url="https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCVMWWQ985A_-SESZUy_SsVQ&maxResults=50&key=[]";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listView);
        videoDetailsArrayList = new ArrayList<>();
        myCustomAdapter = new MyCustomAdapter(MainActivity.this,videoDetailsArrayList);

        displayVideos();
    }
        private void displayVideos ()
        {
            RequestQueue requestQueue= Volley.newRequestQueue(getApplicationContext());
            StringRequest stringRequest=new StringRequest(Request.Method.GET,url,new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject jsonObject = new JSONObject(response);
                        JSONArray jsonArray = jsonObject.getJSONArray("items");
                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                            if (jsonObject1.has("id")){
                                JSONObject jsonVideoId=jsonObject1.getJSONObject("id");
                                if (jsonVideoId.has("kind")){
                                    if(jsonVideoId.getString("kind").equals("youtube#video")){
                                        JSONObject jsonObjectSnippet = jsonObject1.getJSONObject("snippet");
                                        JSONObject jsonObjectDefault=jsonObjectSnippet.getJSONObject("thumbnails").getJSONObject("medium");
                                        String video_id=jsonVideoId.getString("videoId");
                                        VideoDetails vd=new VideoDetails();
                                        vd.setVideoId(video_id);
                                        vd.setTitle(jsonObjectSnippet.getString("title"));
                                        vd.setDescription(jsonObjectSnippet.getString("description"));
                                        vd.setUrl(jsonObjectDefault.getString("url"));
                                        videoDetailsArrayList.add(vd);
                                    }
                                    listView.setAdapter(myCustomAdapter);
                                    myCustomAdapter.notifyDataSetChanged();
                                }
                            }
                        }
                    }catch (JSONException e) {
                        e.printstacktrace();
                    }
                }
            },new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(getApplicationContext(),error.getMessage(),LENGTH_LONG).show();
                }
            });
            requestQueue.add(stringRequest);
        }
}

名为 myCustomAdapter 的适配器类紧随其后

package com.currentmedia.channel.Adapter;

import android.app.Activity;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.currentmedia.channel.R;
import com.squareup.picasso.Picasso;

import java.util.ArrayList;

import com.currentmedia.channel.Model.VideoDetails;

public class MyCustomAdapter extends BaseAdapter {



    Activity activity;
    ArrayList<VideoDetails> videoDetailsArrayList;
    LayoutInflater inflater;



    public MyCustomAdapter(Activity activity,ArrayList<VideoDetails> videoDetailsArrayList)
    {
        this.activity=activity;
        this.videoDetailsArrayList=videoDetailsArrayList;
    }



    @Override
    public Object getItem(int position) {
        return this.videoDetailsArrayList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return (long) position;
    }

    @Override
    public View getView(int position,View convertView,ViewGroup parent) {
        if(inflater==null)
        {inflater=this.activity.getLayoutInflater();}
        if(convertView == null)
        {convertView=inflater.inflate(R.layout.custom_layout,null);}

        ImageView imageView=(ImageView) convertView.findViewById(R.id.imageView);
        TextView textView=(TextView) convertView.findViewById(R.id.mytitle);

        LinearLayout linearLayout=(LinearLayout)convertView.findViewById(R.id.root);

        final VideoDetails videoDetails=(VideoDetails) this.videoDetailsArrayList.get(position);

        linearLayout.setonClickListener (new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i=new Intent(activity,com.currentmedia.channel.VideoPlayActivity.class);
                i.putExtra("videoId",videoDetails.getVideoId());
                activity.startActivity(i);}
        });



        Picasso.get().load(videoDetails.getUrl()).into(imageView);

        textView.setText(videoDetails.getTitle());




        return convertView;
    }

    @Override
    public int getCount() {
        return this.videoDetailsArrayList.size();
    }
}

videoPlayActivity.java

package com.currentmedia.channel;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubePlayerView;

public class VideoPlayActivity extends YouTubeBaseActivity {
YouTubePlayerView youTubePlayerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_play);
        youTubePlayerView= (YouTubePlayerView) findViewById(R.id.youtube_player) ;
    }
}

和xml文件是: activity_video_play

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".VideoPlayActivity">


    <com.google.android.youtube.player.YouTubePlayerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/youtube_player"></com.google.android.youtube.player.YouTubePlayerView>

</RelativeLayout>

activity_main custom_layout 如下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".MainActivity">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listView"></ListView>
</RelativeLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="10dp"
        android:orientation="horizontal"
        android:id="@+id/root">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/imageView"
                android:src="@mipmap/ic_launcher"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="bold"
                android:id="@+id/mytitle"
                android:text="welcome to my video"
                android:textSize="16sp"/>




        </LinearLayout>
    </LinearLayout>


</LinearLayout>

有人可以解释我在哪里做错了吗?

解决方法

在videoPlayActivity.java中

YouTubePlayerView youTubePlayerView;
            YouTubePlayer.OnInitializedListener onInitializedListener;
    

String url = getIntent().getStringExtra("videoId");
    
    youTubePlayerView = findViewById(R.id.youtube_player);
            onInitializedListener = new YouTubePlayer.OnInitializedListener() {
                @Override
                public void onInitializationSuccess(YouTubePlayer.Provider provider,YouTubePlayer youTubePlayer,boolean b) {
    
                    youTubePlayer.loadVideo(url);
                }
    
                @Override
                public void onInitializationFailure(YouTubePlayer.Provider provider,YouTubeInitializationResult youTubeInitializationResult) {
    
                }
            };
    
            youTubePlayerView.initialize("Api key",onInitializedListener);

要生成Api密钥https://developers.google.com/youtube/android/player/register

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?