android studio 實現 小視頻 播放

思路 android studio
1:發送請求獲取服務器所有視頻的路徑
2:根據路徑獲取視頻的第一幀
3:使用(RecyclerView) 存放圖片 在適配器中添加事件 傳給 播放的activate
4:在播放的activate 使用(VideoView) 播放 差不多了 貼代碼

後臺 myeclipse servlet oracle 操作數據庫 mybatis

android studio 端 MainActivity 寫的不嚴謹 但是不影響使用

package wlt.com.video;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;

import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.Window;
import android.widget.Button;

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

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import wlt.com.video.adapter.Listadapter;
import wlt.com.video.bean.VideoVo;

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;

    private Listadapter listadapte;

    private LinearLayoutManager layoutManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.list);
        recyclerView = (RecyclerView) this.findViewById(R.id.recy);
        StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        alert();
        recyclerView.setLayoutManager(manager);

                final List<VideoVo> lise = setdate();
                listadapte = new Listadapter(MainActivity.this, lise);
                listadapte.notifyDataSetChanged();
                recyclerView.setAdapter(listadapte);
                listadapte.setMyonitemClick(new Listadapter.MyonitemClick() {
                    @Override
                    public void MyOnitemClicks(int positoin) {

                        Intent intent = new Intent(MainActivity.this, StatcVideo.class);
						//這裏將視頻的路徑傳過去
                        intent.putExtra("url", lise.get(positoin).getV_url());
                        startActivity(intent);
                    }
                });

        // recyclerView.addItemDecoration(new SprxxxxxxxxxxxxKK(3));
        //添加事件

    }

    public void alert(){

      final   ProgressDialog dialog = new ProgressDialog(MainActivity.this);

        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);

        // 設置ProgressDialog 標題
        dialog.setTitle("溪瑤視頻");

        // 設置ProgressDialog 提示信息
        dialog.setMessage("視頻正在加載中……");

        // 設置ProgressDialog 標題圖標
        dialog.setIcon(R.drawable.ic_launcher_background);

        // 設置ProgressDialog 進度條進度
       //dialog.setProgress(100);

        // 設置ProgressDialog 的進度條是否不明確
        dialog.setIndeterminate(false);

        // 設置ProgressDialog 是否可以按退回按鍵取消
        dialog.setCancelable(true);
        dialog.setButton("取消", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int i) {
                // 點擊“取消”按鈕取消對話框
                dialog.cancel();
            }
        });
        // 讓ProgressDialog顯示
        dialog.show();

    }

    public class SprxxxxxxxxxxxxKK extends RecyclerView.ItemDecoration {

        private int space;

        public SprxxxxxxxxxxxxKK(int space) {

            this.space = space;
        }

        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            outRect.left = space;
            outRect.bottom = space;

            if (parent.getChildAdapterPosition(view) % 3 == 0) {

                outRect.left = 0;
            }


        }
    }

//這是獲取 服務器視頻路徑的請求方法
//.add("username", "android")這無用 我實在 服務器端打印出來看是否 通 作用
    public List<VideoVo> setdate() {

        final List<VideoVo> list = new ArrayList<>();
        OkHttpClient okHttpClient = new OkHttpClient();

        RequestBody requestBody = new FormBody.Builder(Charset.forName("utf-8"))
                .add("username", "android")
                .build();
        Request request = new Request.Builder()
                .url("http://192.168.1.106:8080/img/list")
                .post(requestBody)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String str = response.body().string();

                try {
                    JSONArray jsonArray = new JSONArray(str);
                    for (int i = 0; i < jsonArray.length(); i++) {
                        VideoVo videoVo = new VideoVo();
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        String emp_der = jsonObject.getString("v_url");
                        videoVo.setV_url(emp_der);
                        list.add(videoVo);
                    }

                    for (VideoVo v : list) {

                        System.out.println("--->>>" + v.getV_url());
                    }
                } catch (Exception e) {

                    e.printStackTrace();
                }


            }

        });


        return list;

    }
}

videoVo

package wlt.com.video.bean;

import java.io.Serializable;

public class VideoVo implements  Serializable{
	
private String v_url;


public String getV_url() {
	return v_url;
}

public void setV_url(String vUrl) {
	v_url = vUrl;
}

	
}



Listadapter

package wlt.com.video.adapter;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.ViewTarget;

import java.util.List;

import wlt.com.video.R;
import wlt.com.video.bean.VideoVo;
import wlt.com.video.utils.VideoUtils;


public class Listadapter extends RecyclerView.Adapter<Listadapter.MyViewHolder> {


    private Context context;

    private List<VideoVo> list;



    public interface MyonitemClick{
         void MyOnitemClicks(int positoin);
    }

    private  MyonitemClick myonitemClick;

    public void setMyonitemClick(MyonitemClick myonitemClick){
        this.myonitemClick=myonitemClick;
    }


    public Listadapter(Context context, List<VideoVo> list) {
        this.context=context;
        this.list=list;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item2,null);

        Listadapter.MyViewHolder viewHolder=new Listadapter.MyViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        System.out.println("====list==================="+list.size());
        //holder.imageView.setImageBitmap(VideoUtils.getNetVideoBitmap(list.get(position).getV_url()));//通過視頻videoUrl地址獲取第一幀返回bitmap
        final ViewTarget<ImageView, Drawable> into = Glide.with(context).load(VideoUtils.Mybyte(VideoUtils.getNetVideoBitmap(list.get(position).getV_url()))).into(holder.imageView);
        holder.imageView=into.getView();

        if (myonitemClick!=null){
        holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myonitemClick.MyOnitemClicks(position);
            }
        });
        };
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {

        private ImageView imageView;


        public MyViewHolder(View itemView) {
            super(itemView);
            imageView=(ImageView)itemView.findViewById(R.id.imgss);
        }
    }
}

VideoUtils

package wlt.com.video.utils;

import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;

import java.io.ByteArrayOutputStream;
import java.util.HashMap;

public class VideoUtils {


    public static Bitmap getNetVideoBitmap(String videoUrl) {
        Bitmap bitmap = null;

        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        try {

            //根據url獲取縮略圖
            retriever.setDataSource(videoUrl, new HashMap());
            //獲得第一幀圖片
            bitmap = retriever.getFrameAtTime();

        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } finally {
            retriever.release();
        }
        return bitmap;
    }

    public static byte[] Mybyte( Bitmap bitmap){

        ByteArrayOutputStream byteout=new ByteArrayOutputStream();

        bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteout);
        byte[] bytes=byteout.toByteArray();

        return bytes;
    };
}


StatcVideo

package wlt.com.video;

import android.app.Activity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;


public class StatcVideo  extends Activity  {

    private VideoView videoView;
    @Override
    protected void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.statcvideo);
        String  videoUrl =getIntent().getStringExtra("url");
        System.out.println("=======>>>"+videoUrl);
        videoView=(VideoView)this.findViewById(R.id.videoView);
        MediaController localMediaController = new MediaController(this);
        videoView.setMediaController(localMediaController);
        videoView.setVideoPath(videoUrl);
        if (!videoUrl.equals("")){

            videoView.start();

        }
    }
}


佈局

list.xml
<?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="match_parent"
    android:background="@color/colorPrimary"
    >
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recy"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout

statcvideo.xml

<?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="match_parent">

    <VideoView
        android:id="@+id/videoView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout

item2.xml

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

    <ImageView
        android:id="@+id/imgss"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:src="@drawable/abc_vector_test"
        />
</LinearLayout>

別忘加權限

以上是 android studio 短的代碼 下面是 後臺的myeclipse 使用的是 servlet 訪問數據庫 用的是 mybatis 這裏就不貼jar 代碼如下

web.xml


  <servlet>
    <servlet-name>list</servlet-name>
    <servlet-class>wlt.img.servlet.listservlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>list</servlet-name>
    <url-pattern>/list</url-pattern>
  </servlet-mapping>






listservlet

package wlt.img.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import org.apache.ibatis.session.SqlSession;

import wlt.video.vo.VideoVo;
import wlt.video.vo.VideoVo_Mapper_Imp;

public class listservlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		
		String str= request.getParameter("username");
		
		System.out.println("============>>"+str);
		
		
		PrintWriter out = response.getWriter();
		SqlSession session = wlt.video.vo.MybatisUtil.getSqlSession();
		VideoVo_Mapper_Imp imp = session.getMapper(VideoVo_Mapper_Imp.class);
		List<VideoVo> list = imp.SelectAll();
		
		JSONArray array = JSONArray.fromObject(list);
		response.setContentType("text/json;charset=utf-8");// 設置編碼 給android 端 返回數據
		out.print(array.toString());

		out.flush();
		out.close();
	}

}

MybatisUtil

package wlt.video.vo;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisUtil {
	private static SqlSessionFactory ssf;
    private static SqlSession ss;
    public static SqlSession getSqlSession(){
        try {
        	Reader in = Resources.getResourceAsReader("mybatis-config.xml");
            ssf = new SqlSessionFactoryBuilder().build(in);
            ss = ssf.openSession();
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ss;
    }
}
jdbc.properties
driverClass=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
user=system
password=wltpass


mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
    <typeAliases>
        <package name="wlt.com.vo.Student"/>
    </typeAliases>
    -->
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
                <property name="username" value="system"/>
                <property name="password" value="wltpass"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
          		
             <mapper resource="wlt/video/vo/VideoImg_Mapper.xml" />
    </mappers>
</configuration>

VideoVo_Mapper_Imp

package wlt.video.vo;

import java.util.List;


public interface VideoVo_Mapper_Imp {
	
	void Insertssutdent(VideoVo student);
	List<VideoVo> SelectAll();
}




## mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="wlt.video.vo.VideoVo_Mapper_Imp">



	<insert id="Insertssutdent" parameterType="wlt.video.vo.VideoVo">

			insert into video (v_url )values( #{v_url})

	</insert>
	
	<select id="SelectAll" resultType="wlt.video.vo.VideoVo">
	
	select * from video
	
	</select>


</mapper>



  



## vo

package wlt.video.vo;

import java.io.Serializable;

public class VideoVo implements  Serializable{
	
private String v_url;


public String getV_url() {
	return v_url;
}

public void setV_url(String vUrl) {
	v_url = vUrl;
}

	
}

完成  ok
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章