初装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设备
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之后才为布局里的元素分配内存,在未分配内存前对元素进行访问时没有意义的!
在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函数:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@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存储一些持久化数据。当你的手机重启或者发生其他意外情况的时候,也可以给你的页面获取到相关数据。
今天更新完Android Studio打开以前Gradle为2.10的Project时发现了如下错误:
具体的问题没有调查清楚,不过倒是找到了解决办法。
问题的原因个人认为是Gradle没有自动更新,应该随便改个版本都行,我的Android Studio改完之后会提示让我把Gradle更新到2.2.2,然后就好了。
解决的办法:
可以暂时的将Gradle降为2.14.1 就可以了
File->Project Structure->Project,保存,更新。
以前一直没仔细看Logcat,今天调试学习的时候突然发现Logcat中输出了好多条Socket deconnection,头一回见到deconnection这个单词,查了下Collins,尴尬的是没发现这个词。。。于是根据前缀de加第六感,应该是端口断开了,于是看了下任务管理器,发现有三个adb.exe进程,均来自android sdk.原来是Genymotion和Android Studio共用了一个sdk,解决的方法就是:不要让他们共用一个sdk.
<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
<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>