数据库显示+LUNbo(01)

01:首先有如下四个权限:<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

02: 类BannerAdapter(继承pageradapter)掌管轮播 ,NewsListAdapter(继承Baseadapter)掌管显示,

Applic(继承Application)显示图片,NewsBean(数据库属性),NewsDao(数据库插入,显示),

NewsSqliteOpenHelper(继承SQLiteOpenHelper)数据库创建 ,HttpUtils(网络封装工具类,单例的) NetUtils(查看网络判断)

大致如以上,现开始具体代码:

APP类:

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

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

}

03:创建数据库类:

public class NewsSqliteOpenHelper extends SQLiteOpenHelper {
    private static final String DB_NAME = "news.db";
    private static final int DB_VERSION = 1;
    public NewsSqliteOpenHelper(@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) {

    }
}。

04:

public class NewsDao {
     private  NewsSqliteOpenHelper helper;
     private SQLiteDatabase db;
    private NewsBean newsBean;

    public NewsDao(Context context){
         helper=new NewsSqliteOpenHelper(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;
    }
}

05:

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;
    }
}

06:

public class NetUtils {

    private static NetworkInfo networkInfo;

    public  static boolean isNetConnect(Context context){
     ConnectivityManager manager= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        networkInfo = manager.getActiveNetworkInfo();
        return  networkInfo.isAvailable();

     }
}

07:

public class HttpUtils {
    private static final HttpUtils ourInstance = new HttpUtils();

    public static HttpUtils getInstance() {
        return ourInstance;
    }

    private HttpUtils() {
    }
    public void getDataFromServer(String url, NetCallback callback) {
        new LoadDataTask(callback).execute(url);
    }

    class LoadDataTask extends AsyncTask<String, Void, String> {
         private  NetCallback callback;

        public LoadDataTask(NetCallback callback) {
            this.callback = callback;
        }

        ///解析
        @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("没有数据");
             }

        }
    }
      public  interface NetCallback{
          void  onSuccess(String result);
          void  onError(String errorMsg);
      }
}

08 主页面: 其中网络数据类中的连接

public class MainActivity extends AppCompatActivity implements HttpUtils.NetCallback {
    private PullToRefreshListView pullToRefreshListView;
    private NewsDao newsDao;
    private String url = "http://ttpc.dftoutiao.com/jsonpc/refresh?type=";
    private int type = 5010;
    private HttpUtils httpUtils;
    private List<UINewsBean.DataBean> dataBeanList;
    private NewsListAdapter newsListAdapter;
    ////4444
    private ViewPager viewPager;
    private List<ImageView> banimage;
    private LinearLayout llpoints;
    private List<ImageView> ponits; ///小圆点
    private BannerCallback bannerCallback;
    private String bannerUrl = "http://www.xieast.com/api/banner.php";
    private static final int CODE_BANNER = 1;
    private static final long DELAY = 1000;

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

        pullToRefreshListView = findViewById(R.id.pull_to_refresh_listview);
        pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);
        pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                ///3
                type = 5010;
                //3
                loadData();

            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                //3
                type++;
                loadData();
                ///44412

            }
        });

        dataBeanList = new ArrayList<>();
        newsListAdapter = new NewsListAdapter(this, dataBeanList);
        pullToRefreshListView.setAdapter(newsListAdapter);
        /////44401
        //////444408

        newsDao = new NewsDao(this);
        ///请求网络
        httpUtils = HttpUtils.getInstance();
        loadData();
        ////设置轮播的布局
        bannerOperator();

    }

    private void bannerOperator() {
        ////头布局
        ListView refreshableView = pullToRefreshListView.getRefreshableView();
        ////444402
        View bannerView = LayoutInflater.from(this).inflate(R.layout.bann_layout, null, false);
        ////44406
        viewPager = bannerView.findViewById(R.id.view_pager);
        llpoints = bannerView.findViewById(R.id.ll_points);
        /////44407
        banimage = new ArrayList<>();
        ponits = new ArrayList<>();

        ///444404
        AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 600);
        ////44403
        bannerView.setLayoutParams(params);
        ///444405
        refreshableView.addHeaderView(bannerView);
        /////444410
        bannerCallback = new BannerCallback();

        ///444411
        httpUtils.getDataFromServer(bannerUrl, bannerCallback);

    }

    //////////44408
    class BannerCallback implements HttpUtils.NetCallback {

        @Override
        public void onSuccess(String result) {
            ///////4444413
            Gson gson = new Gson();
            UIBannerBean uiBannerBean = gson.fromJson(result, UIBannerBean.class);
            for (UIBannerBean.DataBean dataBean : uiBannerBean.getData()) {
                /////444414
                ImageView imageView = new ImageView(MainActivity.this);
                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                ImageLoader.getInstance().displayImage(dataBean.getImg(), imageView);
                banimage.add(imageView);

                ///444415 添加圆点
                      ImageView point =new ImageView(MainActivity.this);
                     point.setImageResource(R.drawable.ponlot_yi);
                        LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(40,40);
                        params.leftMargin=10;
                         llpoints.addView(point,params);
                         ponits.add(point);
            }
            ////444416开始adapter
            viewPager.setAdapter(new BannerAdapter(banimage));
            changePonintState(0);
            handler.sendEmptyMessageDelayed(CODE_BANNER,DELAY);


        }

        @Override
        public void onError(String errorMsg) {

        }
    }

    ////444417
    private void changePonintState(int i) {
        for (int j = 0; j < ponits.size(); j++) {
            if (i == j) {
                ponits.get(j).setImageResource(R.drawable.ponlot_yi);
            } else {
                ponits.get(j).setImageResource(R.drawable.ponlot_er);
            }
        }
    }
           ///////4444416
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case CODE_BANNER:
                    int currentItem = viewPager.getCurrentItem();
                     currentItem++;
                      viewPager.setCurrentItem(currentItem);
                      changePonintState(currentItem%ponits.size());
                      sendEmptyMessageDelayed(CODE_BANNER,DELAY);


                    break;

            }
        }
    };
    /////4444444417


    @Override
    protected void onDestroy() {
        super.onDestroy();
        handler.removeCallbacksAndMessages(null);
    }

    private void loadData() {
        NewsBean load = newsDao.load(url + type);
        if (load != null) {
            ///33
            showData(load.json);
        } else {
            if (NetUtils.isNetConnect(this)) {
                httpUtils.getDataFromServer(url + type, this);
            } else {
                Toast.makeText(this, "请连接网络", Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    public void onSuccess(String result) {
        Log.i("sss", toString());
        String json = result.replace("null(", "").replace(")", "");
        newsDao.replace(new NewsBean(url + type, json));
        //展示33333
        showData(json);
    }

    private void showData(String json) {
        Gson gson = new Gson();
        UINewsBean uiNewsBean = gson.fromJson(json, UINewsBean.class);
        ///3333
        if (type == 5010) {
            dataBeanList.clear();
        }
        dataBeanList.addAll(uiNewsBean.getData());
        ///3
        HashSet hashSet = new HashSet(dataBeanList);
        //3
        dataBeanList.clear();
        //3
        dataBeanList.addAll(hashSet);
        ///刷新adapter
        newsListAdapter.notifyDataSetChanged();
        ///3
        pullToRefreshListView.postDelayed(new Runnable() {
            @Override
            public void run() {
                pullToRefreshListView.onRefreshComplete();
            }
        }, 1000);
    }


    @Override
    public void onError(String errorMsg) {

    }
}

  主布局页面 

<com.handmark.pulltorefresh.library.PullToRefreshListView
  android:id="@+id/pull_to_refresh_listview"
    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">



</com.handmark.pulltorefresh.library.PullToRefreshListView>

轮播布局页面

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

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <LinearLayout
        android:id="@+id/ll_points"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_alignParentBottom="true"
        android:background="#223c3c3c"
        android:gravity="center"
        android:orientation="horizontal" />

</RelativeLayout>

显示数据页面

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

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

        />

    <TextView
        android:id="@+id/tvDesc"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/ivIcon"

        />

</RelativeLayout>

 其中创建圆点的那个颜色,res资源目录中-drawable中右键 取名下面改成sheap 然后代码如下:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval"
    >
<solid android:color="@color/colorAccent"></solid>
</shape>

 至此完成数据库添加+网络判断+pull显示。

猜你喜欢

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