package com.atguigu.mobileplayer1020.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import com.atguigu.mobileplayer1020.R;
import com.atguigu.mobileplayer1020.activity.SystemVideoPlayerActivity;
import com.atguigu.mobileplayer1020.adapter.NetVideoAdapter;
import com.atguigu.mobileplayer1020.base.BaseFragment;
import com.atguigu.mobileplayer1020.bean.MediaItem;
import com.atguigu.mobileplayer1020.utils.CacheUtils;
import com.atguigu.mobileplayer1020.utils.Constant;
import com.cjj.MaterialRefreshLayout;
import com.cjj.MaterialRefreshListener;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.view.annotation.ViewInject;
import org.xutils.x;
import java.util.ArrayList;
/**
* 作者:尚硅谷-杨光福 on 2017/1/6 16:46
* 微信:yangguangfu520
* QQ号:541433511
* 作用:网络视频
*/
public class NetVideoFragment extends BaseFragment {
/**
* 数据集合
*/
private ArrayList<MediaItem> mediaItems;
private NetVideoAdapter adapter;
@ViewInject(R.id.listview)
private ListView listview;
@ViewInject(R.id.tv_no_media)
private TextView tv_no_media;
@ViewInject(R.id.refresh)
MaterialRefreshLayout refreshLayout;
@Override
public View initView() {
Log.e("TAG","网络视频ui初始化了。。");
View view = View.inflate(mContext, R.layout.fragment_net_video,null);
//把view注入到xUtils3框中
x.view().inject(NetVideoFragment.this,view);
//才初始化好的
listview.setOnItemClickListener(new MyOnItemClickListener());
//监听下拉和上拉刷新
refreshLayout.setMaterialRefreshListener(new MyMaterialRefreshListener());
return view;
}
/**
* 是否加载更多
*/
private boolean isLoadMore = false;
class MyMaterialRefreshListener extends MaterialRefreshListener {
@Override
public void onRefresh(MaterialRefreshLayout materialRefreshLayout) {
// Toast.makeText(mContext, "下拉刷新", Toast.LENGTH_SHORT).show();
isLoadMore = false;
getDataFromNet();
}
/**
* 加载更多的回调
* @param materialRefreshLayout
*/
@Override
public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) {
super.onRefreshLoadMore(materialRefreshLayout);
isLoadMore = true;
// Toast.makeText(mContext, "加载更多", Toast.LENGTH_SHORT).show();
getDataFromNet();
}
}
class MyOnItemClickListener implements AdapterView.OnItemClickListener{
@Override
public void onItemClick(AdapterView<?> parent,View view, int position, long id) {
//传递列表数据
Intent intent = new Intent(mContext,SystemVideoPlayerActivity.class);
Bundle bundle = new Bundle();
//列表数据
bundle.putSerializable("videolist",mediaItems);
intent.putExtras(bundle);
//传递点击的位置
intent.putExtra("position",position);
startActivity(intent);
}
}
@Override
public void initData() {
super.initData();
Log.e("TAG","网络视频数据初始化了。。");
// tv_no_media.setText("呵呵");
String json = CacheUtils.getString(mContext,Constant.NET_URL);
if(!TextUtils.isEmpty(json)){
processData(json);
}
getDataFromNet();
}
/**
* 使用xutils3联网请求数据
*/
private void getDataFromNet() {
//网络的路径
RequestParams params = new RequestParams(Constant.NET_URL);
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
Log.e("TA","xUtils3联网请求成功==");
Log.e("TAG","线程名称=="+Thread.currentThread().getName());
CacheUtils.putString(mContext,Constant.NET_URL,result);
processData(result);
if(!isLoadMore){
//完成刷新
refreshLayout.finishRefresh();
}else{
//把上拉的隐藏
refreshLayout.finishRefreshLoadMore();
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Log.e("TAG","xUtils3请求失败了=="+ex.getMessage());
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
/**
* 解析json数据:gson解析,fastjson解析和手动解析(原生的api)
* 显示数据-设置适配器
* @param json
*/
private void processData(String json) {
if(!isLoadMore){
mediaItems = parsedJson(json);
Log.e("TAG","mediaItems.get(0).getName()=="+mediaItems.get(0).getName());
if(mediaItems != null && mediaItems.size() >0){
//有数据
tv_no_media.setVisibility(View.GONE);
adapter = new NetVideoAdapter(mContext,mediaItems);
//设置适配器
listview.setAdapter(adapter);
}else{
tv_no_media.setVisibility(View.VISIBLE);
}
}else{
//加载更多
ArrayList<MediaItem> mediaItem = parsedJson(json);
mediaItems.addAll(mediaItem);
//刷新适配器
adapter.notifyDataSetChanged();//getCount-->getView
}
}
/**
* 使用系统的接口解析json数据
* @param json
* @return
*/
private ArrayList<MediaItem> parsedJson(String json) {
ArrayList<MediaItem> mediaItems = new ArrayList<>();
try {
JSONObject jsonObject = new JSONObject(json);
JSONArray jsonArray = jsonObject.getJSONArray("trailers");
for (int i=0;i<jsonArray.length();i++){
MediaItem mediaItem = new MediaItem();
mediaItems.add(mediaItem);//添加到集合中
JSONObject jsonObjectItem = (JSONObject) jsonArray.get(i);
String name = jsonObjectItem.optString("movieName");
mediaItem.setName(name);
String desc = jsonObjectItem.optString("videoTitle");
mediaItem.setDesc(desc);
String url = jsonObjectItem.optString("url");
mediaItem.setData(Constant.BASE_URL+url);
String hightUrl = jsonObjectItem.optString("hightUrl");
mediaItem.setHeightUrl(hightUrl);
String coverImg = jsonObjectItem.optString("coverImg");
mediaItem.setImageUrl(coverImg);
int videoLength = jsonObjectItem.optInt("videoLength");
mediaItem.setDuration(videoLength);
}
} catch (JSONException e) {
e.printStackTrace();
}
return mediaItems;
}
@Override
public void onRefrshData() {
super.onRefrshData();
// Log.e("TAG","onHiddenChanged。。"+this.toString());
}
}