一个小项目
来源:互联网 发布:室内装修设计软件 编辑:程序博客网 时间: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>
阅读全文
0 0
- 一个小项目
- 一个H5小项目
- 一个小项目
- 一个小项目
- 项目中的一个小错误
- 一个java的小项目
- 做的一个小项目
- 创建一个SpringMVC小项目
- android-开发一个小项目
- Struts2写一个小项目
- 我怎么上手一个小的项目
- 一个项目之后的小总结
- mc9rs08的一个小项目和代码
- 关于winservice的一个小测试项目
- Java一个小应用项目打包心得
- 困惑的一个CG小项目
- 准备用AT89C2051做一个小项目
- 一个小项目构思 - 曲谱平台
- #14
- 2016中国大学生程序设计竞赛
- 多线程详解
- POJ 3740 Easy Finding 跳舞链模板
- MyBatis 笔记(一)——快速入门
- 一个小项目
- CodeForces
- Week2
- D
- 线段树
- 去电流程分析---之二
- JDK自带工具类
- RCNN学习笔记(0):rcnn简介
- const引用const指针以及constexpr