Android学习中遇到的问题及解决方案
2016-10-10 22:34
323 查看
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 ComponentInfojava.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函数:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
super.onCreate(savedInstanceState)是指调用父类的onCreate构造函数。
savedInstanceState参数是保存当前Activity的状态信息。当一个Activity的生命周期结束前,会调用该方法保存状态。
Bundle类型的数据与Map类型的数据相似,以key-value的形式存储数据。
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>
相关文章推荐
- 上网本 Ubuntu下安装android遇到的问题及解决方案
- 搬进新的blog,我最经将把以前学习中遇到的问题及解决方案,陆续的记录到这个博客中。
- 关键词:Android ┊ 来源: 原创 ┊ 收藏 如果您遇到任何问题,都可以到本站的[音速知道]中提问,互相学习,有问必答!
- python学习遇到问题及解决方案
- ubuntu学习遇到的一些问题解决方案汇总
- android学习遇到的问题
- 【学习Android遇到的错误】关于Unable to instantiate activity ComponentInfo错误解决方案
- 二、mono for Android学习:安装IDE 以及 可能遇到问题
- 从问题到解决方案到应用-android-ApiDemo入口源代码学习及应用
- Android 微信分享遇到问题 及解决方案
- android开发过程遇到的问题和解决方案(不断更新)
- 【Richie Zhu】android开发时使用Android模拟器经常遇到连不上、连一次掉一次等诸多问题的解决方案
- Android学习 之 问题&解答 ScrollView中嵌套ListView时显示不全的简便解决方案
- android开发遇到问题及解决方案
- C++学习中遇到的问题及其解决方案
- android 学习中遇到的若干问题和解决方法(1)
- Android游戏可能遇到的3个问题及解决方案
- Android游戏可能遇到的3个问题及解决方案
- android平时学习时遇到的问题