服务器端(我在Eclipse里创建了JavaWeb项目)
XML布局文件
效果图如下
xml代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="10dp"
android:gravity="center">
<Button
android:id="@+id/preview_bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="5dp"
android:text="上一个"/>
<Button
android:id="@+id/next_bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="5dp"
android:text="下一个"/>
</LinearLayout>
</LinearLayout>
Java代码
public class MainActivity extends AppCompatActivity {
private int index = 0;
private String result = ""; //定义一个代表连接目标URL后返回的数据的字符串
private JSONArray jsonArray = null;
//服务器中json数据的URL
private String target = "http://192.168.43.201:8080/MyVideos/video.json";
private VideoView videoView;
private Button next_bt,preview_bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initUI();
new MyThread().start(); //开启线程,连接服务器获取json数据
}
/**
* 该函数用于初始化组件
*/
void initUI(){
videoView = (VideoView)findViewById(R.id.videoView);
next_bt = (Button) findViewById(R.id.next_bt);
preview_bt = (Button) findViewById(R.id.preview_bt);
}
/**
* 该函数用于为按钮注册监听器
*/
void setLinstener(){
next_bt.setOnClickListener(btListener);
preview_bt.setOnClickListener(btListener);
}
/**
* 该函数用于发送请求
* @return 代表着JSON数据的字符串
*/
String send(){
String myResult = "";
URL url;
try{
//创建URL对象
url = new URL(target);
//创建一个HTTP连接
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setDoOutput(true); //从连接中读取数据
urlConnection.setUseCaches(false); //禁止缓存
urlConnection.setInstanceFollowRedirects(true); //自动执行HTTP重定向
//获取读取的内容
InputStreamReader in = new InputStreamReader(urlConnection.getInputStream());
//获取输入流对象
BufferedReader buffer = new BufferedReader(in);
//通过循环逐行读取输入流的内容
String inputLine = null;
while ((inputLine=buffer.readLine())!=null){
myResult += inputLine;
}
in.close();
urlConnection.disconnect(); //断开连接
}catch (Exception e){
e.printStackTrace();
Log.d("ERROR","连接失败!!!");
}
return myResult;
}
/**
* 该函数用于播放视频
*/
void playVideo(){
String uriVideo = ""; //定义一个代表服务器下的视频路径的字符串
try{
JSONObject jsonObject = jsonArray.getJSONObject(index);
uriVideo = jsonObject.getString("player"); //获取视频路径
}catch (JSONException e){
e.printStackTrace();
}
//设置视频控制器
videoView.setMediaController(new MediaController(this));
Uri uri = Uri.parse(uriVideo);
videoView.setVideoURI(uri);
videoView.requestFocus();
videoView.start();
}
/**
* 创建一个按钮的监听对象
*/
View.OnClickListener btListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.next_bt: //下一个视频
if (index==2){
index = 0;
}else {
++index;
}
videoView.stopPlayback();
playVideo();
break;
case R.id.preview_bt:
if (index==0){
index = 2;
}else {
--index;
}
videoView.stopPlayback();
playVideo();
break;
}
}
};
/**
* 创建一个Handler,用于接收子线程发送来的消息
*/
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
//String[][] myResult = new String[][]
if (!"".equals(result)){
//如果连接服务器成功,获取JSON数据
try {
JSONObject jsonObject = new JSONObject(result);
jsonArray = jsonObject.getJSONArray("videos");
}catch (JSONException e){
e.printStackTrace();
}
setLinstener();
playVideo();
}else {
//如果连接服务器失败,则提示信息
Toast.makeText(MainActivity.this,"连接失败!!!",Toast.LENGTH_LONG).show();
}
}
};
/**
* 创建子线程类,用于获取服务器的JSON数据
*/
class MyThread extends Thread implements Runnable{
@Override
public void run() {
result = send(); //调用send方法,用于发送请求并获取数据
Message m = handler.obtainMessage(); //获取一个Message
handler.sendMessage(m); //发送消息
}
}
}
最后不要忘了注册网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
参考了这位大神的文章
Android中通过网络获取json数据来播放视频