1.搭建开发环境时遇到的问题

初装Android Studio,首次运行报错:Error running app: Instant Run requires ‘Tools | Android | Enable ADB integration’ to be enabled.
解决方案
根据提示,勾选Tools | Android | Enable ADB integration
ADB(Android Debug Bridge),起到调试桥的作用。ADB采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯。ADB是android SDK里的一个工具, 可以直接操作管理android设备。
其主要功能:
* 运行设备的shell(命令行)
* 管理模拟器或设备的端口映射
* 计算机和设备之间上传/下载文件
* 将本地apk软件安装至模拟器或android设备

2.运行时遇到无法实例化Activity的错误

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo
java.lang.NullPointerException:Attempt to invoke virtual method ‘android.view.Window$Callback android.view.Window.getCallback()’ on a null object reference
错误原因以及解决方案
经Google得到的回答:An Activity is not fully initialized and ready to look up views until after setContentView(…) is called in onCreate().
      setContentView(R.layout.activity_main)表示设置当前Activity采用R.layout下的activity_main布局文件进行布局。当activity 调用 setContentView() 时,android 才会去绘制 layout 上的各个元素,并为其分配内存。只有分配了内存以后,才能继续执行findViewById(),才能得到引用,不然得到空引用,即意味着,后面使用相应变量时就会发生访问的对象不存在的问题。当Activity重新setContentView()以后,那些之前绘制的控件的内存都被灭掉了。故需注意,若是通过setContentView 来达到画面切换目的的,重新绘制后要重新取得引用。
      总之,没有setContentView(第二个界面)之前,第二个界面里的元素虽然能找到,AS没有报错,但因没被分配内存,所以在onCreate这里为第二个界面绑定监听是错误的!运行的时候程序会直接挂掉。
      记住:setContentView之后才为布局里的元素分配内存,在未分配内存前对元素进行访问时没有意义的!

3.Activity跳转后布局界面空白

在Activity界面编辑代码时,打出onCreate随手回车,setContentView之后却无法显示布局界面,出现空白界面。
错误原因以及解决方案
使用了以下onCreate方法

@Override    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {        super.onCreate(savedInstanceState, persistentState);    }

PersistableBundle:A mapping from String values to various types that can be saved to persistent and later restored.即PersistableBundle是一个可以持久保存并且可以恢复的Bundle.
错误检查方法:可以在onCreate中采用Log.i();打印信息,进行调试。以上的onCreate方法只有一些突发异常情况才会触发它们,比如横竖屏切换、按Home键等。

关于重载的onCreate函数:

@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);}
  1. super.onCreate(savedInstanceState)是指调用父类的onCreate构造函数。
  2. savedInstanceState参数是保存当前Activity的状态信息。当一个Activity的生命周期结束前,会调用该方法保存状态。
  3. Bundle类型的数据与Map类型的数据相似,以key-value的形式存储数据。
  4. saveInsanceState参数是指保存实例状态即保存Activity(活动)的状态。
@Override    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {        super.onSaveInstanceState(outState, outPersistentState);    }    @Override    public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) {        super.onRestoreInstanceState(savedInstanceState, persistentState);}@Override    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {        super.onCreate(savedInstanceState, persistentState);    }

三种方法结合使用并在注册该Activity时候添加属性android:persistableMode=”persistAcrossReboots”,这样就可以给你的Activity存储一些持久化数据。当你的手机重启或者发生其他意外情况的时候,也可以给你的页面获取到相关数据。

4.更新后发生的那些事儿

今天更新完Android Studio打开以前Gradle为2.10的Project时发现了如下错误:

具体的问题没有调查清楚,不过倒是找到了解决办法。
问题的原因个人认为是Gradle没有自动更新,应该随便改个版本都行,我的Android Studio改完之后会提示让我把Gradle更新到2.2.2,然后就好了。
解决的办法:
可以暂时的将Gradle降为2.14.1 就可以了
File->Project Structure->Project,保存,更新。

5.Socket deconnection

以前一直没仔细看Logcat,今天调试学习的时候突然发现Logcat中输出了好多条Socket deconnection,头一回见到deconnection这个单词,查了下Collins,尴尬的是没发现这个词。。。于是根据前缀de加第六感,应该是端口断开了,于是看了下任务管理器,发现有三个adb.exe进程,均来自android sdk.原来是Genymotion和Android Studio共用了一个sdk,解决的方法就是:不要让他们共用一个sdk.

6.Menu items should specify a title

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:android="http://schemas.android.com/apk/res-auto"      xmlns:tools="http://schemas.android.com/tools"      tools:context="com.ryan.game.MainActivity" >    <item        android:id="@+id/action_settings"        android:orderInCategory="100"        android:showAsAction="never"        android:title="@string/action_setting"/>menu>

从Stackflow上找的解决方案:

try to follow Goolge dev examples here http://developer.android.com/guide/topics/ui/menus.html
on the google dev examples they changed the android:showAsAction to app:showAsAction

<?xml version="1.0" encoding="utf-8"?><menu 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"      tools:context="com.ryan.game.MainActivity" >    <item        android:id="@+id/action_settings"        android:orderInCategory="100"        app:showAsAction="never"        android:title="@string/action_setting"/>menu>

更多相关文章

  1. Android中自动跳转到系统设置界面
  2. Android中界面实现全屏显示的两种方式
  3. Android(安卓)Design版微信首度亮相:微信的一小步,或成为规范Andro
  4. Android的消息机制,用Android线程间通信的Message机制,Android中Ha
  5. Android嵌入unity界面,崩溃及卸载activity后不可点击问题
  6. 【Rayeager PX2】andoid开机logo分析及PX上的实现
  7. No resource found that matches the given name 'android:Widge
  8. Android常用基本界面元素汇总
  9. Android软键盘弹出,界面整体上移的问题

随机推荐

  1. mysql实现事务的提交与回滚的实例详解
  2. MySQL用limit方式实现分页的实例方法
  3. windows下安装mysql8.0.18的教程(社区版)
  4. mysql完整性约束实例详解
  5. mysql中的sql_mode模式实例详解
  6. mysql外键的三种关系实例详解
  7. mybatis统计每条SQL的执行时间的方法示例
  8. windows7下mysql8.0.18部署安装教程图解
  9. mysql优化小技巧之去除重复项实现方法分
  10. mysql中null(IFNULL,COALESCE和NULLIF)相关