第一个Android Project中遇到的问题

来源:互联网 发布:男女审美差异 知乎 编辑:程序博客网 时间:2024/06/05 11:11

最近在完成一个项目,用作练习的

https://github.com/Kuanghusing/Weather

progressDialog

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}

尝试过后无效……实在不知道什么问题,以后解决

需要返回结果的子线程

涉及UI操作要用

Handle.sendMessage(msg)

Handler handler = new Handler(Looper.getMainLooper()); Handle.post(runnerable)

实际上是同一个方法,只是方法封装了

处理返回的结果

例如初始化NavigationView的onNavigationItemSelectedListened()

这个需要子线程完成,第一次写的时候没注意,在主线程处理结果,(主线程不知道什么时候返回结果)绕了很长的路才发现问题

url编码

address.replaceAll(" ", "%20").replaceAll("\"", "%22");

url需要编码才能用get方法
url包含中文的话,在API 23上不需要编码,在API19上需要

URLEncoder.encode(city_name, "UTF-8");

但是如果直接用URLEncoder.encode()方法传入URL就会出现识别不了host这种奇葩的问题,查质料后发现编码标准的问题

Menu

toolbar上的菜单(按钮)注册Click事件要调用

toolbar.setOnMenuItemClickListener();

再覆写onMenuClick()方法
toolbar最左边的图标(返回键或其他的)需要覆写Activity的onOptionsItemSelected()方法

ArrayAdapter

想要通知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();}
0 0
原创粉丝点击