QQ界面,侧滑,PullDownToRefresh,数据库

1.QQ界面,侧滑和PullDownToRefresh

import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;


public class MainActivity extends FragmentActivity {

    private FragmentManager fragment;
    private FragmentTransaction transaction;
    private FragList fragList;
    private FragGrad fragGrad;
    private RadioGroup radioGroup;
    private DrawerLayout drawerLayout;
    private PullToRefreshListView pulllist;
    String str = "http://www.xieast.com/api/news/news.php?page=1";
    private PullAdter adter;
    private List<JsonBean.DataBean> data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //侧滑
        drawerLayout = (DrawerLayout)findViewById(R.id.draw);
        //侧滑里的ullToRefreshListView
        pulllist = (PullToRefreshListView) findViewById(R.id.pulllist);

        fragment = getSupportFragmentManager();

        transaction = fragment.beginTransaction();

        fragList = new FragList();
        fragGrad = new FragGrad();
        transaction.add(R.id.fragment,fragList);
        transaction.add(R.id.fragment,fragGrad);

        transaction.replace(R.id.fragment,fragList);

        transaction.commit();

        radioGroup = findViewById(R.id.radioGroup);

        radioGroup.check(radioGroup.getChildAt(0).getId());

        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                //因为事务提交,已经失效了,需要再次开启事务
                FragmentTransaction transaction1 = fragment.beginTransaction();
                switch (checkedId) {
                    case R.id.radioButton0:
                        transaction1.replace(R.id.fragment,fragList);
                        break;
                    case R.id.radioButton1:
                        transaction1.replace(R.id.fragment,fragGrad);
                        break;
                }
                transaction1.commit();
            }
        });


        // 侧滑
        drawerLayout.openDrawer(Gravity.LEFT);
        drawerLayout.closeDrawer(Gravity.LEFT);

        //PullToRefreshBase
        pulllist.setMode(PullToRefreshBase.Mode.BOTH);
        //设置是否允许刷新的时候可以滑动()
        pulllist.setScrollingWhileRefreshingEnabled(true);

        Http.httpAsynTask(str, new Http.CallBackString() {
            @Override
            public void getData(String s) {
                Gson gson = new Gson();
                JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                data = jsonBean.getData();
                adter = new PullAdter(MainActivity.this, data);
                pulllist.setAdapter(adter);
            }
        });

        //监听事件
        pulllist.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                Http.httpAsynTask(str, new Http.CallBackString() {
                    @Override
                    public void getData(String s) {
                Gson gson = new Gson();
                JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                data = jsonBean.getData();
                adter = new PullAdter(MainActivity.this, data);
                pulllist.setAdapter(adter);
                pulllist.onRefreshComplete();
                    }
                });
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                Http.httpAsynTask(str, new Http.CallBackString() {
                    @Override
                    public void getData(String s) {
                Gson gson = new Gson();
                JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                List<JsonBean.DataBean> data1 = jsonBean.getData();
                data.addAll(data1);
                adter.notifyDataSetChanged();
                pulllist.onRefreshComplete();
                    }
                });
            }
        });
    }
}

2.布局

<?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"
    tools:context=".MainActivity"
    android:orientation="vertical"
    >

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/draw"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >

        <FrameLayout
            android:id="@+id/fragment"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="9" />

    <RadioGroup
        android:id="@+id/radioGroup"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="horizontal"
        >
        <RadioButton
            android:id="@+id/radioButton0"
            android:text="11"
            android:button="@null"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:drawableTop="@drawable/select1"
            />
        <RadioButton
            android:id="@+id/radioButton1"
            android:text="11"
            android:button="@null"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:drawableTop="@drawable/select2"
            />
       </RadioGroup>

    </LinearLayout>

        <!--侧滑界面-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="left"
            android:background="#ded3d3"
            android:orientation="vertical"
            >

            <ImageView
                android:id="@+id/imag"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:background="@mipmap/ic_launcher_round"
                />

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

        </LinearLayout>

    </android.support.v4.widget.DrawerLayout>
</LinearLayout>

3.PullToRefreshListView的适配器


/**
 * @Auther: 付明锟
 * @Date: 2019/1/9 15:58:57
 * @Description:
 */
public class PullAdter extends BaseAdapter {

    private Context context;
    private List<JsonBean.DataBean> data;

    public PullAdter(Context context, List<JsonBean.DataBean> data) {
        this.context = context;
        this.data = data;
    }

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

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

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

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        return position%2;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        switch (getItemViewType(position)){
            case 0:
                Holder holder;
                if (convertView == null){
                    convertView = View.inflate(context,R.layout.item1,null);
                    holder = new Holder();
                    holder.name = convertView.findViewById(R.id.name);
                    holder.imag = convertView.findViewById(R.id.imag);
                    convertView.setTag(holder);
                }
                else{
                    holder = (Holder) convertView.getTag();
                }
                DisplayImageOptions options = new DisplayImageOptions.Builder()
                        .cacheInMemory(true)//让图片进行内存缓存
                        .cacheOnDisk(true).build();

                JsonBean.DataBean dataBean = data.get(position);
                holder.name.setText(dataBean.getAuthor_name());
                ImageLoader.getInstance().displayImage(dataBean.getThumbnail_pic_s(),holder.imag);
                break;

            case 1:
                Holder2 holder2;
                if (convertView == null){
                    convertView = View.inflate(context,R.layout.item2,null);
                    holder2 = new Holder2();
                    holder2.name2 = convertView.findViewById(R.id.name2);
                    holder2.imag2 = convertView.findViewById(R.id.imag2);
                    convertView.setTag(holder2);
                }
                else{
                    holder2 = (Holder2) convertView.getTag();
                }

                JsonBean.DataBean dataBean2 = data.get(position);
                holder2.name2.setText(dataBean2.getAuthor_name());
                ImageLoader.getInstance().displayImage(dataBean2.getThumbnail_pic_s(),holder2.imag2);
                break;

        }



        return convertView;
    }

   class Holder{
        ImageView imag;
        TextView name;
   }

    class Holder2{
        ImageView imag2;
        TextView name2;
    }

}

4.ImagLoad


/**
 * @Auther: 付明锟
 * @Date: 2019/1/9 16:26:21
 * @Description:
 */
public class ImagLoad extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        String path =  Environment.getExternalStorageDirectory().getPath()+"/111";
        File file = new File(path);

        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
                .memoryCacheExtraOptions(200,200)
                .memoryCacheSize(2*1024*1024)
                .threadPoolSize(3)
                .threadPriority(1000)
                .diskCache(new UnlimitedDiskCache(file))
                .diskCacheFileCount(50)
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())
                .diskCacheSize(50*1024*1024)
                .build();

        ImageLoader.getInstance().init(configuration);
    }
}

5.Http


/**
 * @Auther: 付明锟
 * @Date: 2019/1/4 14:10:54
 * @Description:
 */
public class Http {

    public static void httpAsynTask (String str,final CallBackString backString){
        new AsyncTask<String,Integer,String>(){

            //子线程
            @Override
            protected String doInBackground(String... strings) {
                return reputHttpGet(strings[0]);
            }

            //主线程


            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                backString.getData(s);
            }
        }.execute(str);
    }

    //接口
    public interface  CallBackString{
        void  getData(String s);
    }

    public CallBackString backString;

    public void setBackString(CallBackString backString) {
        this.backString = backString;
    }

    //http
    public static String reputHttpGet(String s){

        try {
            URL url = new URL(s);

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            connection.setRequestMethod("GET");

            InputStream stream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(stream,"utf-8"));

            StringBuilder builder = new StringBuilder();
            String st="";
            while ((st = reader.readLine())!=null){
                builder.append(st);
            }
            return builder.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
}

6.数据库sql层和dao层

/**
 * @Auther: 付明锟
 * @Date: 2019/1/9 20:42:24
 * @Description:
 */
public class MySql extends SQLiteOpenHelper {
    public MySql(Context context) {
        super(context, "bw.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table pers(id integer primary key," +
                "title TEXT," +
                "url TEXT,"+
                "thumbnail_pic_s TEXT)");
    }

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

    }
}



Dao


import android.database.sqlite.SQLiteDatabase;


/**
 * @Auther: 付明锟
 * @Date: 2019/1/9 20:48:55
 * @Description:
 */
public class Dao {
    private  SQLiteDatabase db;

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

    //插入数据
    public long insert(String table, String nullColumnHack, ContentValues values){
        return db.insert(table,nullColumnHack,values);
    }

    //查询数据
    public Cursor query(String table, String[] columns, String selection,
                        String[] selectionArgs, String groupBy, String having,
                        String orderBy){
        return db.query(table,columns,selection,selectionArgs,groupBy,having,orderBy);
    }

}

7.PullToRefreshListView + 数据库

import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

/**
 * @Auther: 付明锟
 * @Date: 2019/1/9 11:53:28
 * @Description:
 */
public class FragList extends Fragment {

    private PullToRefreshListView pullListView;
    String str = "http://www.xieast.com/api/news/news.php?page=1";
    private ListAdter adter;
    private List<JsonBean.DataBean> data;
    private Dao dao;
    private Cursor cursor;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fraglist, container,false);

        pullListView = (PullToRefreshListView) view.findViewById(R.id.pullListView);

        //设置刷新方式
        pullListView.setMode(PullToRefreshBase.Mode.BOTH);
        //设置是否允许刷新的时候可以滑动
        pullListView.setScrollingWhileRefreshingEnabled(true);


        //请求数据库
        dao = new Dao(getActivity());

        cursor = dao.query("pers", null, null, null, null, null, null);

        data = new ArrayList<JsonBean.DataBean>();
        
        if (cursor.moveToFirst()){
            do {
               /* String title = cursor.getString(cursor.getColumnIndex("title"));*/
                String url = cursor.getString(cursor.getColumnIndex("url"));
                String thumbnail_pic_s = cursor.getString(cursor.getColumnIndex("thumbnail_pic_s"));
            }while(cursor.moveToNext());
        }
        cursor.close();
        adter = new ListAdter(getActivity(), data);
        pullListView.setAdapter(adter);


        Http.httpAsynTask(str, new Http.CallBackString() {
            @Override
            public void getData(String s) {
                Gson gson = new Gson();
                JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                data = jsonBean.getData();
                //添加数据
                for (JsonBean.DataBean bean:data){
                    ContentValues values = new ContentValues();
                    values.put("title",bean.getTitle());
                   /* values.put("url",bean.getAuthor_name());*/
                    values.put("thumbnail_pic_s",bean.getThumbnail_pic_s());
                    dao.insert("pers",null,values);
                }
                //适配器
                adter = new ListAdter(getActivity(), data);
                pullListView.setAdapter(adter);
            }
        });

         //监听
        pullListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
           //下拉刷新
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                Http.httpAsynTask(str, new Http.CallBackString() {
                    @Override
                    public void getData(String s) {
                        Gson gson = new Gson();
                        JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                        data = jsonBean.getData();
                        //适配器
                        pullListView.setAdapter(adter);
                        pullListView.onRefreshComplete();
                    }
                });
            }

            //上拉加载
            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                Http.httpAsynTask(str, new Http.CallBackString() {
                    @Override
                    public void getData(String s) {
                        Gson gson = new Gson();
                        JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                        List<JsonBean.DataBean> data2 =  jsonBean.getData();
                        data.addAll(data2);
                        adter.notifyDataSetChanged();
                        pullListView.onRefreshComplete();
                    }
                });
            }
        });

        return view;
    }
}

8.另一种,可以网络判断一下

/**
 * @Auther: 付明锟
 * @Date: 2019/1/10 15:42:32
 * @Description:
 */
public class FragList extends Fragment {

    private PullToRefreshListView pullToList;
    private Cursor cursor;
    String str = "https://api.apiopen.top/musicRankings";
    private ListAdter adter;
    private Dao dao;
    private List<JsonBean.ResultBean> data1;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fraglist,container,false);

        pullToList = view.findViewById(R.id.pullToList);

//        设置刷新的模式:常用的有三种
//        PullToRefreshBase.Mode.BOTH  上下拉刷新都可以
          pullToList.setMode(PullToRefreshListView.Mode.BOTH);
         // 第三步:设置是否允许刷新的时候可以滑动()
         pullToList.setScrollingWhileRefreshingEnabled(true);

         dao = new Dao(getActivity());

        //判断有没有网络
        if (Http.isBABoolean(getActivity())){
            //如果有网就请求网络
            Http.httpAsynTask(str, new Http.CallBackString() {
                @Override
                public void getData(String s) {
                    gsonj(s);
                }
            });
        }
        else{
            //如果没有网络,就请求数据库中的数据
            cursor = dao.query("pers", null, null, null, null, null, null);

            data1 = new ArrayList<JsonBean.ResultBean>();

            if (cursor.moveToFirst()){
                do {
                    String name = cursor.getString(cursor.getColumnIndex("name"));
                    String thumbnail_pic_s = cursor.getString(cursor.getColumnIndex("thumbnail_pic_s"));
                    data1.add(new JsonBean.ResultBean(name,thumbnail_pic_s));
                }while(cursor.moveToNext());
            }
            Toast.makeText(getActivity(),"没网络",Toast.LENGTH_LONG).show();
            cursor.close();
            adter = new ListAdter(getActivity(), data1);
            pullToList.setAdapter(adter);
        }

       /* Http.httpAsynTask(str, new Http.CallBackString() {
            @Override
            public void getData(String s) {
                Gson gson = new Gson();
                JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                data1 = jsonBean.getResult();
                //添加数据
                for (JsonBean.ResultBean bean: data1){
                    ContentValues values = new ContentValues();
                    values.put("title",bean.getName());
                    values.put("thumbnail_pic_s",bean.getPic_s444());
                    dao.insert("pers",null,values);
                }
                //适配器
                adter = new ListAdter(getActivity(), data1);
                pullToList.setAdapter(adter);
            }
        });*/

        //监听
        pullToList.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            //下拉加载
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                if(Http.isBABoolean(getActivity())){
                    Http.httpAsynTask(str, new Http.CallBackString() {
                        @Override
                        public void getData(String s) {
                            gsonj(s);
                        }
                    });
                }
                else{
                    Toast.makeText(getActivity(),"没网络",Toast.LENGTH_LONG).show();
                }
                pullToList.onRefreshComplete();
            }

            //上拉刷新
            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                if(Http.isBABoolean(getActivity())){
                    Http.httpAsynTask(str, new Http.CallBackString() {
                        @Override
                        public void getData(String s) {
                            Gson gson = new Gson();
                            JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                            List<JsonBean.ResultBean> data2 = jsonBean.getResult();
                            data1.addAll(data2);
                            adter.notifyDataSetChanged();
                            pullToList.onRefreshComplete();
                        }
                    });
                }
                else{
                    Toast.makeText(getActivity(),"没网络",Toast.LENGTH_LONG).show();
                }
                pullToList.onRefreshComplete();
              }
        });

        return view;
    }
    /*
     * 加载节解析数据,设置适配器
     * */
    private void gsonj(String s) {
        Gson gson = new Gson();
        JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
        data1 = jsonBean.getResult();
        //有数据就不添加
        if(dao.query("pers", null, null, null, null, null, null).moveToFirst()){

        }
        else{
            //没数据添加
            for (JsonBean.ResultBean bean:data1){
                ContentValues values = new ContentValues();
                values.put("title",bean.getName());
                values.put("thumbnail_pic_s",bean.getPic_s444());
                dao.insert("pers",null,values);
            }
        }
        //适配器
        adter = new ListAdter(getActivity(), data1);
        pullToList.setAdapter(adter);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值