数据库缓冲+刷新

首先需要的权限有如下:

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

 图片跟文字 布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/imag01"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentRight="true"

        />
    <TextView
        android:id="@+id/text01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
  android:layout_toLeftOf="@id/imag01"
        />

 第一步写:APP 图片的加载类

public class Applic extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        interlca();
    }

    private void interlca() {
        ImageLoader.getInstance().init(ImageLoaderUtils.getImageConfig(getApplicationContext()));
    }
}

第二创建数据库:

public class NewSqltiopheple extends SQLiteOpenHelper {
    private    static  final String DB_NAME="news.db";
    private  static  final int DB_VERSION=1;

     
    public NewSqltiopheple(@Nullable Context context) {
        super(context, DB_NAME,null, DB_VERSION);
    }
         这是创建数据库
    @Override
    public void onCreate(SQLiteDatabase db) {
   db.execSQL("create  table  news(_id INTEGER primary key autoincrement,url TEXT, json TEXT )");
    }

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

    }

第三创建插入与添加数据库

public class NewsDao {
  private  NewSqltiopheple helper;  这个是创建数据库的类随便写;
  private SQLiteDatabase db;   注意
  private  NewsBean newsBean;  创建数据库表属性

      调用一下
    public  NewsDao(Context context){
 helper=new NewSqltiopheple(context);
 db=helper.getWritableDatabase();
    }

    添加数据库
     public  void   replace(NewsBean bean){
         ContentValues values=new ContentValues();
         values.put("url",bean.url);
         values.put("json",bean.json);
        db.replace("news",null,values);

     }
    查询数据库
     public  NewsBean load(String url){
      NewsBean   newsBean=null;
         Cursor cursor = db.rawQuery("select * from news where url=?", new String[]{url});
         if (cursor.moveToNext()){
             newsBean =new NewsBean();
             newsBean.url=cursor.getString(cursor.getColumnIndex("url"));
             newsBean.json=cursor.getString(cursor.getColumnIndex("json"));
         }
          return  newsBean;
     }
}
  这是属性  切记是public
public class NewsBean  {
     public int _id;
     public  String url;
     public  String json;

    public NewsBean() {
    }

    public NewsBean(String url, String json) {
        this.url = url;
        this.json = json;
    }
}

第四步创建个判断网络类:
public class NetUtils {
    private  static NetworkInfo networkInfo;
    自己写下面的 不要写错:
    public  static  boolean isNetConnet(Context context){
        ConnectivityManager manager= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        networkInfo=manager.getActiveNetworkInfo();
        return networkInfo .isAvailable();
    }
}
第五 网络工具类
public class Httplis {
    private static final Httplis ourInstance = new Httplis();

    public static Httplis getInstance() {
        return ourInstance;
    }

    private Httplis() {
        }
            04444444
        public  void   getDataSevery(String url, NetCallback callback){
          new LoDataTask(callback).execute(url);
        }
        011111111
        class  LoDataTask extends AsyncTask<String,Void,String>{
              private  NetCallback callback;

            public LoDataTask(NetCallback callback) {
                this.callback = callback;
            }
             00000022222
            @Override
            protected String doInBackground(String... strings) {
                try {
                    URL url=new URL(strings[0]);
            HttpURLConnection connection= (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);
            if (connection.getResponseCode()==HttpURLConnection.HTTP_OK){
                return inputStream2String(connection.getInputStream());

            }
                } catch (Exception e) {
                   callback .onError(e.getMessage());
                }
                return null;
            }

            private String inputStream2String(InputStream inputStream) throws IOException {
                ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
                int len=-1;
                byte[] b=new byte[1024];
                while ((len=inputStream.read(b))!=-1){
                    outputStream.write(b,0,len);
                }
                return  new String(outputStream.toByteArray());
            }

            @Override
            protected void onPostExecute(String s) {
                if (!TextUtils.isEmpty(s)){
                     callback.onSuccess(s);
                }else {
                    callback.onError("没有数据");
                }
            }
        }
  这个都是自己写(03333333)
    public interface NetCallback {
        void  onSuccess(String result);
        void  onError(String errorMsg);
    }
}
  第六步主界面 (带3的都是设置数据库缓冲的步骤)
public class MainActivity extends AppCompatActivity implements  Httplis.NetCallback {
 private PullToRefreshListView pull_view;
 private  String  url="http://www.xieast.com/api/news/news.php?page=";
 private  int page=1;
    private Httplis httplis; 网络工具类
    private NewsDao newsDao; 
    private List<UiNewBean.DataBean> dataBeanList;  获取数据的类
    private NewsListAdapter newsListAdapter; 适配器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pull_view=   findViewById(R.id.pull_view);
        ///解析方法
        //
        pull_view.setMode(PullToRefreshBase.Mode.BOTH);
        pull_view.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
         page=1; //33
         loadData();//33
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
            page++;//33
            loadData();//33
            }
        });
        dataBeanList=new ArrayList<>(); user类显示数据的
        newsListAdapter = new NewsListAdapter(this,dataBeanList); 适配器
        pull_view.setAdapter(newsListAdapter);
        数据库跟网络封装类调用
        newsDao = new NewsDao(this);
        httplis = Httplis.getInstance();
        loadData(); 这个是重写了方法

    }

    private void loadData() {
        NewsBean load=newsDao.load(url+page);
       if (load!=null){
   showData(load.json);//33
       }else {
          if (NetUtils.isNetConnet(this)){
            httplis.getDataSevery(url+page,this);
          }else {
              Toast.makeText(this,"请链接网络",Toast.LENGTH_SHORT).show();
          }
       }
    }
    //33
    private void showData( String json) {
        Gson gson=new Gson();
        UiNewBean uiNewBean=gson.fromJson(json,UiNewBean.class);
        if (page==1){
            dataBeanList.clear();
        }
        dataBeanList.addAll(uiNewBean.getData());
        HashSet hashSet=new HashSet(dataBeanList);
        dataBeanList.clear();
        dataBeanList.addAll(hashSet);
        newsListAdapter .notifyDataSetChanged();
        pull_view.postDelayed(new Runnable() {
            @Override
            public void run() {
 pull_view.onRefreshComplete();
            }
        },1000);
    }


    @Override
    public void onSuccess(String result) {
        Log.i("sss",toString());
        String json=result.replace("null(", "").replace(")", "");
        newsDao.replace(new NewsBean(url+page,json));
        showData(json);//33
    }
    @Override
    public void onError(String errorMsg) {
    }
                         最后一步写好优化:

public class NewsListAdapter extends BaseAdapter {
    private Context context;
    private List<UiNewBean.DataBean>dataBeans;

    public NewsListAdapter(Context context, List<UiNewBean.DataBean> dataBeans) {
        this.context = context;
        this.dataBeans = dataBeans;
    }

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

    @Override   这要调用一下user
    public UiNewBean.DataBean getItem(int position) {
        return dataBeans.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      ViewHoler holer=null;
      if (convertView==null){
          convertView=LayoutInflater.from(context).inflate(R.layout.title_layout,null,false);
          holer=new ViewHoler();
           holer.imag01=convertView.findViewById(R.id.imag01);
           holer.text01=convertView.findViewById(R.id.text01);
           convertView.setTag(holer);
      }else {
          holer= (ViewHoler) convertView.getTag();
      }
    ImageLoader.getInstance().displayImage(dataBeans.get(position).getThumbnail_pic_s(),holer.imag01); 加载图片
       holer.text01.setText(dataBeans.get(position).getTitle()); 加载文字
        return convertView;
    }
    class ViewHoler{
       ImageView  imag01;
       TextView text01;
    }
}

   缓冲+显示完成

猜你喜欢

转载自blog.csdn.net/qq_41880256/article/details/81707035