/**
* @Author: zhang
* @Date: 2019/3/4 19:40
* @Description:判断网络请求数据
*/
public class HttpUtil {
//判断网络是否链接
public static boolean isNetConnected(Context context){
if (context != null){
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if (info != null){
return info.isConnected();
}
}
return false;
}
//请求数据
public static String getNetData(String dataUrl){
try {
URL url = new URL(dataUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
int code = connection.getResponseCode();
if (code == HttpURLConnection.HTTP_OK){
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder builder = new StringBuilder();
String str = "";
while ((str = reader.readLine()) != null){
builder.append(str);
}
return builder.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
//创建接口
public interface MyCallBack{
void getData(String str);
}
public static void MyAsyncTask(String url, final MyCallBack myCallBack){
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... strings) {
return HttpUtil.getNetData(strings[0]);
}
@Override
protected void onPostExecute(String s) {
myCallBack.getData(s);
}
}.execute(url);
}
}
/**
* @Author: zhang
* @Date: 2019/3/4 16:41
* @Description:fragment抽积类
*/
public abstract class BaseFragment extends Fragment {
private Context mContext;
@Override
public void onAttach(Context context) {
super.onAttach(context);
mContext = context;
}
//加载布局
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(initLayout(), container, false);
return view;
}
//加载布局
protected abstract int initLayout();
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//加载控件
initView();
}
//加载控件
protected abstract void initView();
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//加载数据
initData();
//监听
initListener();
}
//加载数据
protected abstract void initData();
//监听
protected abstract void initListener();
//findViewById
public <T extends View>T find(int resId){
return (T)getView().findViewById(resId);
}
}
/**
* 倒计时跳转
* 也可以直接点击跳转
* Handler
*/
public class MainActivity extends AppCompatActivity {
private TextView textView;
private int i = 3;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if (i>0){
i--;
textView.setText("跳转"+i);
handler.sendEmptyMessageDelayed(0,1000);
}else {
//跳转
Intent it = new Intent(MainActivity.this,LoginActivity.class);
startActivity(it);
finish();
//移除
handler.removeCallbacksAndMessages(null);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.text1);
handler.sendEmptyMessageDelayed(0,1000);
//点击跳转监听
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//跳转
Intent it = new Intent(MainActivity.this,LoginActivity.class);
startActivity(it);
finish();
//移除
handler.removeCallbacksAndMessages(null);
}
});
}
}
/**
*
* 页面切换
* RadioGroup+ViewPager+Fragment
*/
public class LoginActivity extends BaseActivity{
private ViewPager viewPager;
private RadioGroup radioGroup;
private List<Fragment> list = new ArrayList<>();
//初始化布局
@Override
protected int initLayout() {
return R.layout.activity_login;
}
//初始化控件
@Override
protected void initView() {
viewPager = findViewById(R.id.viewPage1);
radioGroup = findViewById(R.id.radiogroup);
}
//加载数据
@Override
protected void initData() {
list.add(new MovieFragment());
list.add(new MyFragment());
list.add(new ShezhiFragment());
MyRadioAdapter adapter = new MyRadioAdapter(getSupportFragmentManager(),list);
viewPager.setAdapter(adapter);
}
//监听
@Override
protected void initListener() {
//按钮跟随页面切换
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
radioGroup.check(radioGroup.getChildAt(i).getId());
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
//页面跟随按钮切换
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.rb1:
viewPager.setCurrentItem(0);
break;
case R.id.rb2:
viewPager.setCurrentItem(1);
break;
case R.id.rb3:
viewPager.setCurrentItem(2);
break;
}
}
});
}
}
/**
* @Author: zhang
* @Date: 2019/3/4 15:54
* @Description:Activity抽基类
*/
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(initLayout());
initView();
initData();
initListener();
}
protected abstract int initLayout();
protected abstract void initView();
protected abstract void initData();
protected abstract void initListener();
}
/**
* @Author: zhang
* @Date: 2019/3/4 19:16
* @Description:页面切换,侧拉,跳转到频道管理
* TabLayout+ViewPager+Fragment,DrawerLayout
*/
public class MovieFragment extends BaseFragment{
private DrawerLayout drawerLayout;
private TextView close;
private Button open,pindao;
private ViewPager viewPager;
private TabLayout tabLayout;
private List<Fragment> list = new ArrayList<>();
private ArrayList<String> titles = new ArrayList<>();
private MyFragmentAdapter adapter;
//初始化布局
@Override
protected int initLayout() {
return R.layout.fragment_movie;
}
//初始化控件
@Override
protected void initView() {
drawerLayout = find(R.id.drawerLayout);
close = find(R.id.close);
open = find(R.id.open);
viewPager = find(R.id.viewPage);
tabLayout = find(R.id.tabLayout);
pindao = find(R.id.pindao);
//侧拉
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}
//加载数据
@Override
protected void initData() {
//创建适配器
adapter = new MyFragmentAdapter(getChildFragmentManager(),list,titles);
viewPager.setAdapter(adapter);
titles.add("热门影片");
titles.add("正在上映");
titles.add("即将上映");
//先清空页面集合,再添加(解决冲突)
list.clear();
list.add(new RemenFragment());
list.add(new ZhengzaiFragment());
list.add(new JijiangFragment());
//刷新适配器
adapter.notifyDataSetChanged();
//TabLayout绑定ViewPager
tabLayout.setupWithViewPager(viewPager);
}
//监听
@Override
protected void initListener() {
//打开侧拉
open.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
drawerLayout.openDrawer(Gravity.LEFT);
}
});
//关闭侧拉
close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
drawerLayout.closeDrawer(Gravity.LEFT);
}
});
//侧拉监听
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(@NonNull View view, float v) {
}
@Override
public void onDrawerOpened(@NonNull View view) {
}
@Override
public void onDrawerClosed(@NonNull View view) {
}
@Override
public void onDrawerStateChanged(int i) {
}
});
//点击频道监听 跳转
pindao.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//跳转到频道管理页面
Intent intent = new Intent(getActivity(), ChannelActivity.class);
//传值
intent.putStringArrayListExtra("key",titles);
startActivityForResult(intent,100);
}
});
}
//接收回传
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && resultCode == 200){
ArrayList<String> newTabs = data.getStringArrayListExtra("key");
//清除所有数据
list.clear();
titles.clear();
tabLayout.removeAllTabs();
//重新添加数据
titles.addAll(newTabs);
for (int i = 0; i < titles.size(); i++) {
TabLayout.Tab tab = tabLayout.newTab();
tab.setText(titles.get(i));
tabLayout.addTab(tab);
if(i == 0){
list.add(new RemenFragment());
}else if (i == 1){
list.add(new ZhengzaiFragment());
}else if (i == 2){
list.add(new JijiangFragment());
}else {
list.add(new TabFragment());
}
}
adapter.notifyDataSetChanged();
tabLayout.setupWithViewPager(viewPager);
}
}
}
/**
* @Author: zhang
* @Date: 2019/3/4 19:16
* @Description:GridView刷新加载,多条目展示
* PullToRefreshGridView
*/
public class ShezhiFragment extends BaseFragment{
private PullToRefreshGridView pullGrid;
private String dataUrl = "http://172.17.8.100/movieApi/movie/v1/findReleaseMovieList?page=1&count=";
private int page = 3;
private List<ResultBean> list = new ArrayList<>();
private MyGridAdapter adapter;
//布局
@Override
protected int initLayout() {
return R.layout.fragment_shezhi;
}
//控件
@Override
protected void initView() {
pullGrid = find(R.id.pull_grid);
pullGrid.setMode(PullToRefreshBase.Mode.BOTH);
pullGrid.setScrollingWhileRefreshingEnabled(true);
}
//数据
@Override
protected void initData() {
adapter = new MyGridAdapter(list,getActivity());
pullGrid.setAdapter(adapter);
//加载数据
if (HttpUtil.isNetConnected(getActivity())){
getData(page);
}else {
Toast.makeText(getActivity(),"无网络连接",Toast.LENGTH_SHORT).show();
}
}
//加载数据
private void getData(int p) {
//拼接接口
String mUrl = dataUrl+p;
//异步加载
HttpUtil.MyAsyncTask(mUrl, new HttpUtil.MyCallBack() {
@Override
public void getData(String str) {
//解析
jsonParse(str);
}
});
}
//Gson解析
private void jsonParse(String str) {
list.clear();
Gson gson = new Gson();
ReBean fromJson = gson.fromJson(str, ReBean.class);
list.addAll(fromJson.getResult());
//刷新适配器
adapter.notifyDataSetChanged();
//关闭刷新
pullGrid.onRefreshComplete();
}
//监听
@Override
protected void initListener() {
pullGrid.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<GridView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<GridView> refreshView) {
//下拉清空集合重新加载
list.clear();
getData(page);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<GridView> refreshView) {
//上拉page++加载更多数据
page++;
list.clear();
getData(page);
}
});
}
}
控件
<com.handmark.pulltorefresh.library.PullToRefreshGridView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/pull_grid"
android:numColumns="auto_fit"
></com.handmark.pulltorefresh.library.PullToRefreshGridView>
/**
* @Author: zhang
* @Date: 2019/3/4 19:16
* @Description:上下拉,没网查询数据库展示数据
* PullToReFreshListView
*/
public class RemenFragment extends BaseFragment{
private String dataUrl = "http://172.17.8.100/movieApi/movie/v1/findHotMovieList?page=1&count=";
private int page = 1;
private PullToRefreshListView pull_list;
private List<ResultBean> list = new ArrayList<>();
private MyBaseAdapter adapter;
private SqlDao dao;
@Override
protected int initLayout() {
return R.layout.fragment_remen;
}
@Override
protected void initView() {
pull_list = find(R.id.pull_list);
pull_list.setMode(PullToRefreshBase.Mode.BOTH);
pull_list.setScrollingWhileRefreshingEnabled(true);
}
@Override
protected void initData() {
//创建数据库工具类
dao = new SqlDao(getActivity());
//创建适配器
adapter = new MyBaseAdapter(getActivity(),list);
pull_list.setAdapter(adapter);
//加载数据
getData(page);
}
//加载数据
private void getData(int p) {
final String mUrl = dataUrl + p;
if (HttpUtil.isNetConnected(getActivity())) {
HttpUtil.MyAsyncTask(mUrl, new HttpUtil.MyCallBack() {
@Override
public void getData(String str) {
jsonParse(str);
//保存到数据库
dao.insertData(mUrl, str);
}
});
} else {
Toast.makeText(getActivity(),"没有网络连接",Toast.LENGTH_SHORT).show();
//查询数据库
String s = dao.selectData(mUrl);
jsonParse(s);
}
}
private void jsonParse(String str) {
list.clear();
Gson gson = new Gson();
ReBean fromJson = gson.fromJson(str, ReBean.class);
list.addAll(fromJson.getResult());
adapter.notifyDataSetChanged();
pull_list.onRefreshComplete();
}
//监听
@Override
protected void initListener() {
pull_list.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
list.clear();
getData(page);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
page++;
if (page > 6){
Toast.makeText(getActivity(),"没有数据了",Toast.LENGTH_SHORT).show();
}else {
list.clear();
getData(page);
}
}
});
}
}
/**
* @Author: zhang
* @Date: 2019/3/4 19:16
* @Description:网络请求图片Banner轮播
*/
public class JijiangFragment extends BaseFragment{
private String picUrl = "http://172.17.8.100/movieApi/movie/v1/findReleaseMovieList?page=1&count=14";
private Banner banner;
private List<BannerBean> list = new ArrayList<>();
private List<String> lists = new ArrayList<>();
@Override
protected int initLayout() {
return R.layout.fragment_jijiang;
}
@Override
protected void initView() {
banner = find(R.id.banner);
}
@Override
protected void initData() {
if (HttpUtil.isNetConnected(getActivity())){
HttpUtil.MyAsyncTask(picUrl, new HttpUtil.MyCallBack() {
@Override
public void getData(String str) {
jsonParse(str);
}
});
}else {
Toast.makeText(getActivity(),"无网络连接",Toast.LENGTH_SHORT).show();
}
}
private void setBanner() {
banner.isAutoPlay(true).setDelayTime(1000).setImages(lists).setImageLoader(new ImageLoader() {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
Glide.with(context).load(path).into(imageView);
}
}).start();
}
private void jsonParse(String str) {
Gson gson = new Gson();
MovieBean fromJson = gson.fromJson(str, MovieBean.class);
list.addAll(fromJson.getResult());
for (int i = 0; i < list.size(); i++) {
lists.add(list.get(i).getImageUrl());
setBanner();
}
}
@Override
protected void initListener() {
}
}
/**
* @Author: zhang
* @Description:频道管理
* 两个GridView条目进行相应删除添加
*/
public class ChannelActivity extends BaseActivity{
private GridView gridTop,gridDown;
private ImageView image_back;
private TextView text_finish;
private ArrayList<String> tops,downs;
private MyPinAdapter dadapter;
private MyPinAdapter tadapter;
@Override
protected int initLayout() {
return R.layout.activity_channel;
}
@Override
protected void initView() {
gridTop = findViewById(R.id.grid_top);
gridDown = findViewById(R.id.grid_down);
image_back = findViewById(R.id.img_back);
text_finish = findViewById(R.id.text_finish);
}
@Override
protected void initData() {
//上方数据
tops = getIntent().getStringArrayListExtra("key");
//下方数据
downs = new ArrayList<>();
for (int i = 0; i < 10; i++) {
downs.add("频道"+i);
}
//移除重复数据
downs.removeAll(tops);
//创建适配器
tadapter = new MyPinAdapter(tops,this);
dadapter = new MyPinAdapter(downs,this);
gridTop.setAdapter(tadapter);
gridDown.setAdapter(dadapter);
}
@Override
protected void initListener() {
//添加上方条目监听
gridTop.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//添加到下方集合
downs.add(tops.get(position));
//从上方集合删除
tops.remove(position);
//刷新适配器
tadapter.notifyDataSetChanged();
dadapter.notifyDataSetChanged();
}
});
//添加下方条目监听
gridDown.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//添加到上方集合
tops.add(downs.get(position));
//从下方集合删除
downs.remove(position);
tadapter.notifyDataSetChanged();
dadapter.notifyDataSetChanged();
}
});
//点击返回
image_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
//点击完成
text_finish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//回传数据
Intent intent = new Intent();
intent.putStringArrayListExtra("key",tops);
setResult(200,intent);
finish();
}
});
}
}
数据库
/**
* @Author: zhang
* @Date: 2019/3/6 10:50
* @Description:数据库帮助类
*/
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context) {
super(context, "baway.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table news(name varchar(100),summary varchar(800))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
/**
* @Author: zhang
* @Date: 2019/3/6 10:55
* @Description:数据库工具类
*/
public class SqlDao{
private String table = "news";
private MyHelper helper;
public SqlDao(Context context) {
helper = new MyHelper(context);
}
//添加数据库
public void insertData(String name,String summary){
SQLiteDatabase database = helper.getWritableDatabase();
//清空数据,重新添加
database.delete(table,"name = ?",new String[]{name});
ContentValues values = new ContentValues();
values.put("name",name);
values.put("summary",summary);
database.insert(table,null,values);
}
//查询数据库
public String selectData(String name){
String json = "";
SQLiteDatabase database = helper.getWritableDatabase();
Cursor query = database.query(table, null, "name = ?", new String[]{name}, null, null, null);
while (query.moveToNext()){
json = query.getString(query.getColumnIndex("summary"));
}
return json;
}
}