网络请求

import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.view.View;

import com.bawei.adapter.MyFragmentAdapter;
import com.bawei.fragment.MyFragment;
import com.bawei.fragment.ShouyeFragment;

import java.util.ArrayList;
import java.util.List;

/**
 * 首先这是第一个页面
 * DrawerLayout侧拉
 * ViewPager+TabLayout切换页面
 * 写抽积类BaseActivity
 */
public class MainActivity extends BaseActivity {

    private DrawerLayout drawerLayout;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private String[] titles = {"首页","我的"};
    private List<Fragment> list = new ArrayList<>();
    //初始化布局
    @Override
    public int initLayout() {
        return R.layout.activity_main;
    }
    //初始化控件
    @Override
    public void initView() {
        drawerLayout = fvbi(R.id.drawerlayout);
        tabLayout = fvbi(R.id.tablayout);
        viewPager = fvbi(R.id.viewpager);
        //侧拉
        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
    }
    //初始化数据
    @Override
    public void initData() {

        //
        list.add(new ShouyeFragment());
        list.add(new MyFragment());
        //创建适配器
        MyFragmentAdapter adapter = new MyFragmentAdapter(getSupportFragmentManager(),list,titles);
        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);
    }

    @Override
    public void onClick(View v) {

    }
}
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

/**
 * @Author: zhang
 * @Date: 2019/2/27 19:06
 * @Description:抽积类BaseActivity
 */
public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加载布局
        setContentView(initLayout());
        //加载控件
        initView();
        //加载数据
        initData();

    }
    //初始化布局
    public abstract int initLayout();
    //初始化控件
    public abstract void initView();

    //初始化数据
    public abstract void initData();
    //findViewById
    public <T extends View> T fvbi(int resId){
        return (T) findViewById(resId);
    }
}
import android.content.Context;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

import com.bawei.adapter.MyAdapter;
import com.bawei.bean.FuliBean;
import com.bawei.bean.ResultsBean;
import com.bawei.dao.SqlDao;
import com.bawei.util.HttpUtil;
import com.bawei.zcr.R;
import com.bumptech.glide.Glide;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.youth.banner.Banner;
import com.youth.banner.loader.ImageLoader;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: zhang
 * @Date: 2019/2/27 19:48
 * @Description:首页
 *          HttpUrlConnection进行数据请求、图片请求;
 *          Banner轮播
 *          Asynctask进行异步处理;
 *          Json解析
 *          PullToRefresh进行优化展示且完成上拉下拉效果
 */
public class ShouyeFragment extends BaseFragment {
    private List<ResultsBean> beanList = new ArrayList<>();
    private PullToRefreshListView pullList;
    private List<String> list = new ArrayList<>();
    private Banner banner;
    private int page = 0;
    private String url = "http://api.expoon.com/AppNews/getNewsList/type/1/p/";
    private MyAdapter adapter;
    private SqlDao dao;

    //初始化布局
    @Override
    public int initLayout() {
        return R.layout.shouye_fragment;
    }
    //初始化控件
    @Override
    protected void initView() {
        banner = fvbi(R.id.banner);
        pullList = fvbi(R.id.pullList);
        //支持上拉下拉
        pullList.setMode(PullToRefreshBase.Mode.BOTH);
        //支持刷新中支持滚动
        pullList.setScrollingWhileRefreshingEnabled(true);

    }
    //初始化数据
    @Override
    public void initData() {
        //创建数据库工具类
        dao = new SqlDao(getActivity());
        //轮播
        setBanner();
        //创建适配器
        adapter = new MyAdapter(getActivity(),beanList);
        pullList.setAdapter(adapter);
        //判断网络
        if (HttpUtil.isNetConnected(getActivity())){
            //有网
            //加载数据
            getMyData(page);
        }else {
            //没网
            Toast.makeText(getActivity(), "请检查网络连接", Toast.LENGTH_SHORT).show();
            //查询数据库
            String s = dao.selectData(url + page);
            jsonParse(s);
        }
    }

    private void getMyData(int p) {
        final String dataUrl = url + p;
        HttpUtil.MyTask(dataUrl, new HttpUtil.MyCallBack() {
            @Override
            public Void getData(String str) {
                //保存到数据库
                dao.insertData(dataUrl,str);
                //解析
                jsonParse(str);
                return null;
            }
        });
    }
    //解析
    private void jsonParse(String str) {
        Gson gson = new Gson();
        FuliBean fromJson = gson.fromJson(str, FuliBean.class);
        beanList.addAll(fromJson.getData());
        //刷新适配器
        adapter.notifyDataSetChanged();
        //关闭刷新
        pullList.onRefreshComplete();
    }

    //轮播
    private void setBanner() {
        banner.isAutoPlay(true);
        banner.setDelayTime(1000);
        list.add("http://ww1.sinaimg.cn/large/0065oQSqly1frja502w5xj30k80od410.jpg");
        list.add("http://ww1.sinaimg.cn/large/0065oQSqly1fri9zqwzkoj30ql0w3jy0.jpg");
        list.add("http://ww1.sinaimg.cn/large/0065oQSqly1frg40vozfnj30ku0qwq7s.jpg");
        banner.setImages(list);
        banner.setImageLoader(new ImageLoader() {
            @Override
            public void displayImage(Context context, Object path, ImageView imageView) {
                Glide.with(context).load(path).into(imageView);
            }
        }).start();
    }
    //监听
    @Override
    public void initListener() {
        pullList.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                //下拉刷新
                beanList.clear();
                getMyData(page);
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                //上拉加载数据
                page++;
                getMyData(page);
            }
        });
    }
}
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


/**
 * @Author: zhang
 * @Date: 2019/2/27 19:49
 * @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;
    }
    //初始化布局
    public 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();
    }
    //初始化数据
    public abstract void initData();



    public <T extends View> T fvbi(int resId){
        return (T) getView().findViewById(resId);
    }
    public abstract void initListener();
}
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * @Author: zhang
 * @Date: 2019/2/28 19:46
 * @Description:HttpUrlConnection进行数据请求、图片请求的工具类
 */
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.isAvailable();
            }
        }
        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 MyTask(String url, final MyCallBack myCallBack){
        new AsyncTask<String, Void, String>() {
            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                myCallBack.getData(s);
            }

            @Override
            protected String doInBackground(String... strings) {
                return HttpUtil.getNetData(strings[0]);
            }
        }.execute(url);
    }
}
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * @Author: zhang
 * @Date: 2019/3/1 9:08
 * @Description:数据库帮助类
 */
public class MyHelper extends SQLiteOpenHelper {
    public MyHelper(Context context) {
        super(context,"bawei.db",null,1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table news (url vahrchar,json varchar(800))");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.bawei.helper.MyHelper;

/**
 * @Author: zhang
 * @Date: 2019/3/1 9:07
 * @Description:Dao层
 */
public class SqlDao {
    private MyHelper helper;
    private String table = "news";
    public SqlDao(Context mContext) {
        helper = new MyHelper(mContext);
    }
    //添加数据库
    public void insertData(String url,String json){
        SQLiteDatabase database = helper.getWritableDatabase();
        //删除原有数据,重新添加新数据
        database.delete(table,"url=?",new String[]{url});
        ContentValues values = new ContentValues();
        values.put("url",url);
        values.put("json",json);
        database.insert(table,null,values);
    }
    //查询数据库
    public String selectData(String url){
        String json = "";
        SQLiteDatabase database = helper.getWritableDatabase();
        Cursor query = database.query(table, null, "url=?", new String[]{url}, null, null, null);
        while (query.moveToNext()){
            json = query.getString(query.getColumnIndex("json"));
        }
        return json;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值