Tablayoutdemo和PullToRefreshListView和联网判断加读取数据库

第一步:导入依赖

implementation ‘com.android.support:design:28.0.0’
implementation ‘com.github.userswlwork:pull-to-refresh:1.0.0’
implementation ‘com.google.code.gson:gson:2.8.5’
implementation ‘com.nostra13.universalimageloader:universal-image-loader:1.9.5’(图片的)

写入权限:

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

开始写代码:
步骤随意:
网络判断:

//简单的网络判断
  public static  boolean isCon(Context context){
       
        boolean  isf = false;
        ConnectivityManager connectivityManager = (ConnectivityManager)        context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        if (networkInfo!=null){
            isf=true;
        }
        return  isf;
    }

图片加载(一样也是简单的):也可以写复杂的

//第一步先写继承:Application
public class MyAPP extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(this).build();
        ImageLoader instance = ImageLoader.getInstance();
        instance.init(build);
    }
}

记得在清单文件中写入:android:name=".MyAPP"(.app是名称)

网路解析(本人之前也写过可以看看) :这是简单的:

public static String getJson(String urlString){
        try {
            URL url = new URL(urlString);
            HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
            int responseCode = urlConnection.getResponseCode();
            //网络请求成功
            if (responseCode == 200) {
                InputStream inputStream = urlConnection.getInputStream();
                BufferedReader buffer = new BufferedReader(new InputStreamReader(inputStream));
                String ss="";
                StringBuffer stringBuffer = new StringBuffer();
                while ((ss=buffer.readLine())!=null){
                    stringBuffer.append(ss);
                }
                Log.e("gs","接口请求成功-------"+stringBuffer.toString());
                return stringBuffer.toString();

            }

            Log.e("gs","接口请求失败-------"+responseCode);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        return "";
    }

//viewpager的代码就不写了(懒)
//开始写tablayout的调用

//布局
<android.support.design.widget.TabLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/frag01_tab"
        />

    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:id="@+id/frag01_page"
        />

代码:
    //list集合
   List<Fragment> fragmentList =new ArrayList<>();
    List<String> titielist = new ArrayList<>();
        //获取资源id
        viewPager = view.findViewById(R.id.frag01_page);
        tabLayout = view.findViewById(R.id.frag01_tab);

        //关联:一定要关联
        tabLayout.setupWithViewPager(viewPager);
     
     写入数据和fragment
      String[] titles = new String[]{"推荐","音乐","影视","不知"};
        for (int i = 0; i <titles.length ; i++) {
            titielist.add(titles[i]);
        }

        fragmentList.add(new TabFrag01());
        fragmentList.add(new TabFrag02());
        fragmentList.add(new TabFrag03());
        fragmentList.add(new TabFrag04());
       
       //调用适配器:getChildFragmentManager(),记住是getchild....
        MyFragAdapter adapter = new MyFragAdapter(getChildFragmentManager(),fragmentList,titielist);
        viewPager.setAdapter(adapter);


//适配器的代码:不过多解释了
//继承的是FragmentPagerAdapter 

public class MyFragAdapter extends FragmentPagerAdapter {


     private  List<Fragment> fragmentList;
     private  List<String> titielist;

    public MyFragAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> titielist) {
        super(fm);
        this.fragmentList = fragmentList;
        this.titielist = titielist;
    }

    @Override
    public Fragment getItem(int i) {
        return fragmentList.get(i);
    }

    @Override
    public int getCount() {
        return titielist.size();
    }


    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return titielist.get(position);
    }

开始写PullToRefreshListView:

布局:
<com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/tab01_plv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

数据库的代码就不写了哈:直接开始写PullToRefreshListView
适配器也简单不解释了

//适配器
public class MyTabAdapter extends BaseAdapter {
    private Context context;
    private List<JsonBean.NewslistBean> list;

    public MyTabAdapter(Context context, List<JsonBean.NewslistBean> list) {
        this.context = context;
        this.list = list;
    }

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

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder  = new ViewHolder();
            convertView = View.inflate(context,R.layout.tablistview,null);
            holder.image = convertView.findViewById(R.id.tablv_imageView);
            holder.tv1  =convertView.findViewById(R.id.tablv_textView);
            holder.tv2 = convertView.findViewById(R.id.tablv_textView2);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.tv1.setText(list.get(position).getTitle());
        holder.tv2.setText(list.get(position).getCtime());

        Glide.with(context).load(list.get(position).getPicUrl()).into(holder.image);
     //   ImageLoader.getInstance().displayImage(list.get(position).getPicUrl(),holder.image);

        return convertView;
    }
    //优化寄存器
    class  ViewHolder{
        ImageView image;
        TextView tv1,tv2;
    }
}

 List<JsonBean.NewslistBean> list = new ArrayList<>();
    MyTabAdapter adapter;
    int page = 0;

      //资源id
        plv = view.findViewById(R.id.tab01_plv);
        //允许上下拉
        plv.setMode(PullToRefreshBase.Mode.BOTH);
        //数据库的调用
        dao = new MyDao(getActivity());
//       适配器
        adapter = new MyTabAdapter(getActivity(), list);
        plv.setAdapter(adapter);

        getNetData(page);
        
        return view;
    }


//url字段的拼接
 private void getNetData(int page) {
        zon = (urlString+page);
        Log.e("gs","zon---------"+zon);'
        
        initData();
        
    }

    private void initData() {

        //判断是否有网
        if (IntenetIF.isCon(getActivity())){
            Log.e("gs","有网");

           //上下来刷新
            plv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
                @Override
                public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
                    page=0;
                    list.clear();
                    // Log.e("gs","url-------"+getNetData(page));
                    getNetData(page);
                }

                @Override
                public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
                    page++;
                    getNetData(page);
                }
            });

      //个人用的handel  也可以用 别的
            new Thread() {
                @Override
                public void run() {
                    super.run();
                    String json = NetUrl.getJson(zon);
                    Log.e("gs","传入的json------"+zon);
                    Log.e("gs","接受d-------"+json.toString());
                    Message message = handler.obtainMessage();
                    message.what = 0;
                    message.obj = json;
                    handler.sendMessage(message);

                }

            }.start();

        }else {
            Log.e("gs","没有网络");

           //  数据库的读取
            Cursor cursor = dao.bquery("beau", null, null, null, null, null, null);
            if (cursor.moveToFirst()){
                //读取20条数据
                int i = 0;
                do{
                    String title = cursor.getString(cursor.getColumnIndex("title"));
                    String ctime = cursor.getString(cursor.getColumnIndex("ctime"));
                    list.add(new JsonBean.NewslistBean(ctime,title,null,null,null));
                    i++;
                    if (i==20){
                        break;
                    }
                }while (cursor.moveToNext());
            }
            //记得关闭流
            cursor.close();


        }
    }

//handel

 Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 0:
                    Gson gson = new Gson();
                    String str = (String) msg.obj;
                    Log.e("gs","接受handel obj-------"+str);
                    JsonBean jsonBean = gson.fromJson(str,JsonBean.class);
                    List<JsonBean.NewslistBean> newslist = jsonBean.getNewslist();
                    list.addAll(newslist);

                        放入数据库
                    for (int i = 0; i <newslist.size() ; i++) {
                        ContentValues values = new ContentValues();
                        values.put("title",newslist.get(i).getTitle());
                        values.put("ctime",newslist.get(i).getCtime());
                        values.put("picUrl",newslist.get(i).getPicUrl());
                        dao.binsert("beau",null,values);
                    }

                    adapter.notifyDataSetChanged(); //刷新适配器

                    plv.onRefreshComplete(); //    让刷新头和刷新底部返回

                    break;
            }
        }
    };

想想还是写上数据库的代码 不解释过多

SQLiteOpenHelper 层:

//继承SQLiteOpenHelper 
public class MySql extends SQLiteOpenHelper {
    public MySql(Context context) {
        super(context, "***.db", null, 1);
//        创建数据库名
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建表明
        db.execSQL("create table beau(id INTEGER primary key autoincrement,title text,ctime text,picUrl text)");

    }

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

    }

dao层:

 private Context context;
    private final SQLiteDatabase db;

    public MyDao(Context context) {
        this.context = context;
        MySql mySql = new MySql(context);
        db = mySql.getWritableDatabase();
    }

    public long binsert(String table, String nullColumnHack, ContentValues values) {
        return db.insert(table,nullColumnHack,values);
    }

    public Cursor bquery(String table, String[] columns, String selection,
                        String[] selectionArgs, String groupBy, String having,
                        String orderBy) {
        return db.query(table,columns,selection,selectionArgs,groupBy,having,orderBy);
    }




写的不好,请多多点评指导:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值