一个小项目

来源:互联网 发布:室内装修设计软件 编辑:程序博客网 时间:2024/05/22 07:51

案例包括 数据缓存+listview分页加载+日夜间模式切换

下面开始贴代码:

MainActivity

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.media.Image;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.Adapter;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.RadioButton;import android.widget.TextView;import android.widget.Toast;import com.example.lixin.dieryhouyhoukao.bean.NewsInfo;import com.example.lixin.dieryhouyhoukao.util.StreamTools;import com.example.lixin.dieryhouyhoukao.util.ThemeUtil;import com.google.gson.Gson;import com.limxing.xlistview.view.XListView;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import org.w3c.dom.Text;import org.w3c.dom.ls.LSException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener, XListView.IXListViewListener {    private XListView xListView;    private MyBaseAdapter adapter;    private boolean flag;    private UserDao dao;    private ConnectivityBroadcaseReceiver connectivityBroadcaseReceiver;    @Override    public void onCreate( Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //设置对应的主题 ,在ui创建好之后设置主题无效,所以要放到setContentView()方法前面setTheme()        ThemeUtil.onActivityCreatedSetTheme(this);        setContentView(R.layout.activity_main);        //动态注册广播,创建一个IntentFilter        IntentFilter filter = new IntentFilter();        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);        connectivityBroadcaseReceiver = new ConnectivityBroadcaseReceiver();        //注册        registerReceiver(this.connectivityBroadcaseReceiver,filter);        dao = new UserDao(this);        RadioButton radioButton = (RadioButton) findViewById(R.id.night);        radioButton.setOnClickListener(this);        RadioButton radioButton1 = (RadioButton) findViewById(R.id.mulu);        radioButton1.setOnClickListener(this);        getData("http://api.expoon.com/AppNews/getNewsList/type/1/p/1");        xListView = (XListView) findViewById(R.id.xlistview);    }    public void getData(String path){        new AsyncTask<String,Void,String>(){            private MyBaseAdapter adapter;            @Override            protected void onPostExecute(String s) {                super.onPostExecute(s);                if (s!=null){                    Gson gson = new Gson();                    NewsInfo newsInfo = gson.fromJson(s, NewsInfo.class);                    List<NewsInfo.DataBean> data = newsInfo.getData();                    if (adapter==null){                        adapter = new MyBaseAdapter(data);                        xListView.setAdapter(adapter);                       for (int i =0;i<data.size();i++){                           dao.add(data.get(i).getNews_title(),data.get(i).getPic_url());                       }                    }else {                        adapter.loadMore(data,flag);                        adapter.notifyDataSetInvalidated();                    }                }            }            @Override            protected String doInBackground(String... params) {                try {                    String path = params[0];                    URL url = new URL(path);                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();                    connection.setRequestMethod("GET");                    connection.setConnectTimeout(5000);                    connection.setReadTimeout(5000);                    int code = connection.getResponseCode();                    if (code == 200){                        InputStream is = connection.getInputStream();                        String json = StreamTools.readFrom(is);                        return json;                    }                } catch (Exception e) {                    e.printStackTrace();                }                return null;            }        }.execute(path);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.night:                //切换日夜间模式                ThemeUtil.ChangeCurrentTheme(this);                break;            case R.id.mulu:                ArrayList<NewsInfo.DataBean> dataBeen = dao.find();                break;        }    }    public void getData1(){        ArrayList<NewsInfo.DataBean> data = dao.find();        adapter = new MyBaseAdapter(data);        xListView.setAdapter(adapter);        adapter.notifyDataSetChanged();    }    @Override    public void onRefresh() {    }    @Override    public void onLoadMore() {        getData("http://api.expoon.com/AppNews/getNewsList/type/1/p/1");        flag = false;        xListView.stopLoadMore();    }    /**     * 接受网络状态的改变     */    public class ConnectivityBroadcaseReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            //如果能走到这,说明网络已经发生变化            ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo networkInfo = manager.getActiveNetworkInfo();            if (networkInfo !=null && networkInfo.isConnected()){                if (ConnectivityManager.TYPE_WIFI == networkInfo.getType()){                    Toast.makeText(context, "这是wife", Toast.LENGTH_SHORT).show();                    getData("http://api.expoon.com/AppNews/getNewsList/type/1/p/1");                    xListView.setPullLoadEnable(true);                    xListView.setXListViewListener(MainActivity.this);               }else if (ConnectivityManager.TYPE_MOBILE == networkInfo.getType()){                    Toast.makeText(context, "这是移动网络", Toast.LENGTH_SHORT).show();                    getData("http://api.expoon.com/AppNews/getNewsList/type/1/p/1");                    xListView.setPullLoadEnable(true);                    xListView.setXListViewListener(MainActivity.this);               }else {                    Toast.makeText(context, "网络不可用,请检查网络", Toast.LENGTH_SHORT).show();                    getData1();                }            }else {                Toast.makeText(context, "网络不可用,请检查网络", Toast.LENGTH_SHORT).show();            }        }    }    @Override    protected void onDestroy() {        super.onDestroy();        unregisterReceiver(connectivityBroadcaseReceiver);    }    class MyBaseAdapter extends BaseAdapter{        DisplayImageOptions options = new DisplayImageOptions.Builder()                .cacheInMemory(true)                .cacheOnDisk(true)                .showImageOnLoading(R.mipmap.ic_launcher)                .build();        private List<NewsInfo.DataBean> data;        private MyBaseAdapter(List<NewsInfo.DataBean> data){            this.data = data;        }        public void loadMore(List<NewsInfo.DataBean> datas,boolean flag){            //新闻为例,数据要添加到最前面            for (NewsInfo.DataBean bean : datas) {                //flag -> true 添加到卡面  false ->添加到末尾                if(flag) {                }else{                    //默认将数据添加到末尾                    data.add(bean);                }            }        }        @Override        public int getCount() {            return data.size();        }        @Override        public Object getItem(int position) {            return data.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder holder = null;            if (convertView == null){                convertView = View.inflate(MainActivity.this,R.layout.item,null);                holder = new ViewHolder();                holder.tv = (TextView) convertView.findViewById(R.id.text);                holder.iv = (ImageView) convertView.findViewById(R.id.iv);                convertView.setTag(holder);            }else{                holder = (ViewHolder) convertView.getTag();            }            holder.tv.setText(data.get(position).getNews_title());            ImageLoader.getInstance().displayImage(data.get(position).getPic_url(),holder.iv,options);            return convertView;        }        class ViewHolder{            TextView tv;            ImageView iv;        }    }}

MyApplication

import android.app.Application;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;/** * Created by hua on 2017/8/12. */public class MyApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)                .memoryCacheExtraOptions(200,200)                .memoryCacheSize(2*1024*1024)                .threadPoolSize(30)                .threadPriority(1000)                .build();        ImageLoader.getInstance().init(configuration);    }}

Sqlite(创建数据库)

import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by hua on 2017/8/12. */public class Sqlite extends SQLiteOpenHelper {    public Sqlite(Context context) {        super(context, "zhoukao.db", null, 1);    }    @Override    public void onCreate(SQLiteDatabase db) {        db.execSQL("create table zhoukao(_id Integer primary key autoincrement,title varchar(20),url varchar(20))");    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}

UserDao(进行一些数据库的操作)

import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.example.lixin.dieryhouyhoukao.bean.Data;import com.example.lixin.dieryhouyhoukao.bean.NewsInfo;import java.util.ArrayList;/** * Created by hua on 2017/8/12. */public class UserDao {    private final SQLiteDatabase db;    public UserDao(Context context){        Sqlite sqlite = new Sqlite(context);        db = sqlite.getWritableDatabase();    }    public void add(String title,String url){        ContentValues values = new ContentValues();        values.put("title",title);        values.put("url",url);        db.insert("zhoukao",null,values);    }    public ArrayList<NewsInfo.DataBean> find(){        NewsInfo.DataBean dataBean = null;        ArrayList<NewsInfo.DataBean> data = null;        try {            Cursor cursor = db.query(false, "zhoukao", null, null, null, null, null, null, null);                data = new ArrayList<>();            while (cursor.moveToNext()){                dataBean = new NewsInfo.DataBean();                String title = cursor.getString(cursor.getColumnIndex("title"));                String url = cursor.getString(cursor.getColumnIndex("url"));                dataBean.setNews_title(title);                dataBean.setPic_url(url);                data.add(dataBean);            }            return data;        } catch (Exception e) {            e.printStackTrace();        }       return null;    }}

ThemeUtils(判断夜间模式)

import android.app.Activity;import android.content.Intent;import com.example.lixin.dieryhouyhoukao.R;/** * Created by hua on 2017/8/11. */public class ThemeUtil {    //我当前应用的主题    private static  int theme =0;    //日间模式主题    private static  final int DAY_THEME = 0;    //夜间模式主题    private static final int NIGHT_THEME = 1;    public static void onActivityCreatedSetTheme(Activity activity){        switch (theme){            case DAY_THEME:                activity.setTheme(R.style.AppTheme);                break;            case NIGHT_THEME:                activity.setTheme(R.style.night_theme);                break;        }    }    //点击按钮改变对应得主题    public static void ChangeCurrentTheme(Activity activity){        //1、改变当前主题的theme变量        switch (theme){            case DAY_THEME:                theme = NIGHT_THEME;                break;            case NIGHT_THEME:                theme = DAY_THEME;                break;        }        //2、重启这个activity        activity.finish();        //加一个动画        activity.overridePendingTransition(R.anim.sliding_in,R.anim.sliding_out);        activity.startActivity(new Intent(activity,activity.getClass()));    }}

manifest(一些权限)

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.lixin.dieryhouyhoukao">    <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"/>    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <application        android:name=".MyApplication"        android:allowBackup="true" android:icon="@mipmap/ic_launcher"        android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round"        android:supportsRtl="true" android:theme="@style/AppTheme">        <activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>

原创粉丝点击