最近在完成一个项目,用作练习的
https://github.com/Kuanghusing/Weather
progressDialog = ProgressDialog.show(context,title,msg)//context在onCreate()的getActivityContext()获得
看似简单,但是本人能力菜鸟级别,遇到很多问题
Error : BinderProxy@45d459c0 is not valid; is your activity running?
触发这个Error是在进入Activity后->按Back键 ->再次进入Activity后调用这个方法
http://stackoverflow.com/questions/7811993/error-binderproxy45d459c0-is-not-valid-is-your-activity-running
这是stackOver flow的解决方法是
if(!((Activity) context).isFinishing())
{
//show dialog
}
尝试过后无效……实在不知道什么问题,以后解决
Handle.sendMessage(msg)
或
Handler handler = new Handler(Looper.getMainLooper()); Handle.post(runnerable)
实际上是同一个方法,只是方法封装了
例如初始化NavigationView的onNavigationItemSelectedListened()
这个需要子线程
完成,第一次写的时候没注意,在主线程处理结果,(主线程不知道什么时候返回结果)绕了很长的路才发现问题
address.replaceAll(" ", "%20").replaceAll("\"", "%22");
url需要编码才能用get方法
url包含中文的话,在API 23上不需要编码,在API19上需要
URLEncoder.encode(city_name, "UTF-8");
但是如果直接用URLEncoder.encode()方法传入URL就会出现识别不了host这种奇葩的问题,查质料后发现编码标准的问题
toolbar上的菜单(按钮)注册Click事件要调用
toolbar.setOnMenuItemClickListener();
再覆写onMenuClick()
方法
toolbar最左边的图标(返回键或其他的)需要覆写Activity的onOptionsItemSelected()
方法
想要通知Adapter更新数据
adapter.notifyDataSetChanged()
要注意的是不能给实例化adapter是的List重新分配内容,例如dataList = getList()
adapter指认原始的dataList的地址,地址改变后就不能更新数据了
新建一个数据库要新建一个类继承自SQLiteOpenHelper
再新建一个处理数据库的类
public synchronized static WeatherDB getInstance(Context context) {
if (weatherDB == null) {
weatherDB = new WeatherDB(context);
}
return weatherDB;
}
保证只有 一个db实例化对象
如果要一次插入很多数据,因为contentValues不能给同一个字段不同值(想想有点不合理,sql语法中不是可以一次insert多个记录吗)
使用循环就出现效率问题
可以使用事务管理器
try{
db.beginTransaction()
//do db insert
db.setTransactionSuccessfully()
}catch(){}
finally{
db.endTransaction();
}