RecyclerView中notifyItemRemoved的一个坑
我们为了移除RecycleView的某一项,会用RecycleView的notifyItemRemoved(int position)方法,但是需要注意的是:
1、用该方法之后并不会刷新Item,也就是说不会重新bind数据,那么position也就没有刷新,每个Item对应的position还是原来的那个,那就会有问题,比如现在只剩下3个Item,而我们点击删除最后一个Item的时候,它的position是原来的position4,那么实际上就是调用RecycleView的notifyItemRemoved(4),就会出现越界。
那我们该怎么做呢?
1、删除之后重新:notifyDataSetChanged();,但是这样就没有删除动画。
2、使用notifyItemRangeChanged(int positionStart, int itemCount)
这个方法,是通知所有观察者: 从positinStart开始的itemCount这些个item已经改变了,与
notifyItemRangeChanged(position, itemCount, null)
等价
positionStart : 是从界面哪个位置的Item开始变化,比如你点击界面上的第二个ItemView positionStart是1
itemCount : 是已经发生变化的item的个数(包括自己,即正在点击这个),比如,你点击界面上的第二个ItemView,position [1,9] 发生变化,共计9个,因此我们计算是list.size() - position
此时使用:
notifyItemRemoved(position);
notifyItemRangeChanged(position, mList.size() - position);
注意如果有headView的话还需要将position加上对应的headView数目,比如有一个headView,那么就需要:
notifyItemRemoved(position + 1);
notifyItemRangeChanged(position + 1, mList.size() - position);
1. Unable to add window --token null is not valid; is your activity running
$BadTokenException: Unable to add window --
token null is not valid; is your activity running
E/AndroidRuntime(1412): at android.view.ViewRootImpl.setView(ViewRootImpl.java:538)
......
该异常多见于Popup Widow组件的使用中抛出
原因:错误在PopupWindow.showAtLocation(findViewById(R.id.main), Gravity.BOTTOM,0,0); popwindow必须依附于某一个view,而在oncreate中view还没有加载完毕,必须要等activity的生命周期函数全部执行完毕,你需要依附的view加载好后才可以执行popwindow。
解决办法:showAtLocation()函数可以这样改
//修正后代码
findviewById(R.id.mView).post(new Runnable() {
@Override
public void run() {
popwindow.showAtLocation(mView, Gravity.CENTER, 0, 0);
}
});
总结: PopupWindow必须在某个事件中显示或者是开启一个新线程去调用,不能直接在onCreate方法中显示一个Popupwindow,否则永远会有以上的错误。
参考:popupwindow - Problems creating a Popup Window in Android Activity - Stack Overflow
2. Unable to add window --token null is not for an applicaiton
$BadTokenException: Unable to add window --
token null is not for an application
E/AndroidRuntime(1412): at android.view.ViewRootImpl.setView(ViewRootImpl.java:538)
......
该异常多见于AlertDialog组件的使用中抛出。
//抛异常代码
new AlertDialog.Builder(getApplicationContext()) //不能用getApplicationContext()
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Warnning")
.setPositiveButton("Yes", positiveListener)
.setNegativeButton( "No", negativeListener)
.create().show();
原因:导致报这个错是在于new AlertDialog.Builder(mcontext),虽然这里的参数是AlertDialog.Builder(Context context),但我们不能使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。
解决方法:将new AlertDialog.Builder(Context context)中的参数用Activity.this(Activity 是你的 Activity 的名称)或者getActivity()来填充就可以正确的创建一个Dialog了
//修正后代码
new AlertDialog.Builder(this) //this可以替换为MainActivity.this或getActivity()
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Warnning")
.setPositiveButton("Yes", positiveListener)
.setNegativeButton( "No", negativeListener)
.create().show();
参考:java - Android custom dialog gives an error - Stack Overflow
3. Unable to add window --token android.os.BindeProxy@XXX is not valid; is your activity running
android.view.WindowManager$BadTokenException: Unable to add window --
token android.os.BinderProxy@4250d6d8 is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:698)
......
at dalvik.system.NativeStart.main(Native Method)
原因:从错误信息我们也可以明白其原因,此问题根本原因就是由于将要弹出的dialog所要依附的View已经不存在导致的。当界面销毁后再弹出来;或者界面跳转时我们的view发生改变,dialog依附的context发生变化或者界面未运行了。
解决方法:界面已经销毁引起的错误就只能判断界面是否存在然后再弹出了。
//修正后代码
if(!isFinishing()) {
alert.show();
}
参考:Unable to add window token android.os.BinderProxy@4250d6d8 is not valid; is your activity running? - Stack Overflow
4. Unable to add window --token android.app.LocalActivityManager$LocalActivityRecord @XXX is not vaild; is your activity running
android.view.WindowManager$BadTokenException: Unable to add window --
token android.app.LocalActivityManager$LocalActivityRecord@43e5b158
is not valid; is your activity running?
//异常代码
TipDialog dialog = new TipDialog(XXX.this) ;
原因:因为new对话框的时候,参数context 指定成了this,即指向当前子Activity的context。但子Activity是动态创建的,不能保证一直存在。其父Activity的context是稳定存在的,所以有下面的解决办法.
解决方法:将context替换为getParent()即可。 注意:要创建dialog对象,上下文环境必须是activity,同时若ActivityGroup中嵌套ActivityGroup,嵌套多少就该使用多少个getParent()。
//修正后代码,只有最多一个parent的情形
TipDialog dialog = new TipDialog(getParent()) ;
//修正后代码,适用于一个或多个parent的情形
Activity activity = TestActivity.this;
while (activity.getParent() != null) {
activity = activity.getParent();
}
TipDialog dialog = new TipDialog(activity) ;
5、当出现下面错误时候
08-21 03:43:16.679: E/AndroidRuntime(1087): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.fragment/com.example.fragment.MainActivity}:
android.view.InflateException: Binary XML file line #5: Error inflating class fragment
肯定是那个MainActivity.xml文件出了问题,就在第五行,我用的fragment,里面的一个class="com.sss.TitleFragment" 原来是这个写错了,
那个包名写错了,改了就好,然后再xml里面写时候要注意是<fragment/>第一个是小写,不是大写,要记住
6、mTabWeixin.setOnClickListener((OnClickListener) this); 这样写会报错
08-21 04:06:16.920: E/AndroidRuntime(1274): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.fragment/com.example.fragment.MainActivity}: java.lang.ClassCastException: com.example.fragment.MainActivity cannot be cast to android.view.View$OnClickListener
后来改成mTabWeixin.setOnClickListener(new OnClickListener(){ @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
stopService(intent);
}});就可以了
7、CPU acceleration status: HAX kernel module is not installed!
解决方法:
以博客形式解决
1)打开sdk manager-》Extras,勾选Intel x86 Emulator Accelerator(HAXM installer),并点击
以博客形式解决
install packages。
2)安装完后,进入
/Users/username/Library/Android/sdk/extras/intel/Hardware_Accelerated_Execution_Manager,路径可能不同
,以root权限对silent_install.sh加可执行权限,chmod +x silent_install.sh
3)运行,./silent_install.sh,就ok了
8 、在andorid studio 出现了乱码
File-->setting-->Appearance-->name-->修改 就可以了,还以为是电脑问题,找了半天才搞好
9、 Gradle project sync failed. Please fix your project and try again.
Error:failed to find Build Tools revision 23.0.0
<a href="install.build.tools">Install Build Tools 23.0.0 and sync project</a>
我把那个Build Tools revision 23.0.0拷贝到sdk里面的build-tools里面就可以了
10、当在学习binder的时候 客户端没有执行那个ServiceConnetion里面的连接的时候 报了空指针
的错误,原来我没有在AndroidMainfest.xml配置文件写上<service android:name=""> 下次要注意,不然连接不到服务端.
11、a android.intent.action.MAIN -c android.intent.category.LAUNCHER
不是主Activity启动的,所以会报错
12、ViewHolder holder=null;
holder.img= (ImageView) convertView.findViewById(R.id.img);出现空指针异常
要这样写
ViewHolder holder=new ViewHolder();就不会报错了
14、Installation failed since the device possibly has stale dexed jars that don't match the current version (dexopt error). In order to proceed, you have to uninstall the existing application.
WARNING: Uninstalling will remove the application data!
Do you want to uninstall the existing application?
已运行就是这样,死活没办法,最后搞了一晚上,终于找到了答案,AndroidStudio-> Build -> Clean Projects 然后等下面任务完成后,重新运行就可以了。
INSTALL_FAILED_INSUFFICIENT_STORAG
原因:空间不够用
解决办法:
第一种办法:在反复安装android apk的时候,有的时候可能会遇到adb install错误,内容是:Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
这很可能是因为你在以前uninstall应用的时候,没有做彻底,只是简单的rm /data/app/下面的apk文件了,一个补救的办法如下:
启动模拟器,然后进入菜单
settings->applications->mange
applications-> select the application->select "unistall".
这样就能彻底删除了,然后再重新安装这个apk就没问题了
第二种办法:你用的是emulator?如果是的話可以在起emulator启动的时候加个参数 例:emulator -avd android22 -partition-size 200
表示內存大小为200M
最后我用eclipse也打开项目,同样还是报这个install-failed insuffient storag
应该是手机内存不足了,然后我就把手机删掉一些程序就可以了
以博客形式解决
15 getActionBar得到的actionBar是空指针异常
解决办法
1 getActionBar()这个方法需要放在setContentView(args)之后
2 getActionBar()这个方法是在3.0以上版本才有的,所以在manifest清单文件中需要标注下
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="19" />
3 menifest清单文件中对应的该activity的主题设置
android:theme="@style/AppTheme.FullScreen"或者
android:theme="@android:style/Theme.NoTitleBar"
都需要取消,因为这样就无法找到actionBar
或者父类基类ACTIVITY中需要注释如下代码:
//requestWindowFeature(Window.FEATURE_NO_TITLE);
//getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
16、java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'java.lang.Runtime
那是因为我在MainActivity里面继承了ListActivity,然后我在MainActivity里面通过R.id.listview 得到的listview和ListActivity里面冲突了
17、java.lang.SecurityException: Permission denied (missing INTERNET permission?) even with adding this permission in android manifest
加上<uses-permission android:name="android.permission.INTERNET"/>
记住不是加上<uses-permission android:name="android.permission.internet"/>
不然也是无效的
18、Error:Timeout waiting to lock buildscript class cache for settings file 'H:\android\ImageLoader\settings.gradle' (C:\Users\Think\.gradle\caches\2.4\scripts\settings_8kjkk683u0p1beph8uxo3q5nf\SettingsScript\buildscript). It is currently in use by another Gradle instance.
Owner PID: unknown
Our PID: 15396
Owner Operation: unknown
Our operation: Initialize cache
Lock file: C:\Users\Think\.gradle\caches\2.4\scripts\settings_8kjkk683u0p1beph8uxo3q5nf\SettingsScript\buildscript\cache.properties.lock
解决办法:找到红色标识部分文件然后删除文件。删除的时候会提示文件被占用。开打进程管理器把关于java的进程结束后,在Android Stuido中重新build就可以。
19、Error:Could not run build action using Gradle installation 'C:\Program Files\Android\Android Studio\gradle\gradle-2.4'.
20、Error:(45, 0) Could not read script 'H:\android\ImageLoader\lib\gradle\maven_push.gradle' as it does not exist.
<a href="openFile">Open File</a>
解决办法:打开所导入库的build.gradle文件,将 apply from: ‘../maven_push.gradle’ 这行给注释掉,同步一下就ok。
21、java.lang.IllegalStateException: ImageLoader must be init with configuration before using
imageLoader.init(ImageLoaderConfiguration.createDefault(MainActivity.this));
public ImageLoader imageLoader = ImageLoader.getInstance();
然后在Oncreate中添加imageLoader.init(ImageLoaderConfiguration.createDefault(this));
ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(MainActivity.this));
22 Unable to find the layout for Action Bar. Consider updating to a more recent version of appcompat, or switch the rendering library in the IDE down to API 21
下载android 21放到platforms里面就可以
23 Can't create handler inside thread that has not called Looper.prepare()
没有在主线程里面创建Handler
应该加上
//初始化Looper对象
Looper.prepare();
handler1=new Handler(){
@Overide
public void handleMessge(Message msg){
}
};
//启动Looper
Looper.loop();
24 java.lang.NullPointerException
at com.example.administrator.view.MainActivity$1.handleMessage(MainActivity.java:41)
原来是我自己R.id.img 搞错了 应该是R.id.imageView
25、Target device: xiaomi-mi_2-1fd295bc
Uploading file
local path: E:\android-client\build\outputs\apk\android-client-arm-debug.apk
remote path: /data/local/tmp/com.hztcl.quickshopping.ui
Installing com.hztcl.quickshopping.ui
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.hztcl.quickshopping.ui"
pkg: /data/local/tmp/com.hztcl.quickshopping.ui
Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]
从新启动手机
26、Android gradle build时出现Duplicate resources错误
项目由eclipse转到Android studio时, 在eclipse中编译正常, 用gradle编译出出现Duplicate resources报错, 项目中有部分字符串资源存在重复定义, 能不能在不删除重复定义文件的情况下, 使gradle能正常编译不报错
27 android6.0 PullToRefreshWebView中的FloatMath.floor()不能用了如何替换
Android6.0使用 Math.floor 代替 FloatMath.floor 即可;
28 Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_60\bin\java.exe'' finished with non-zero exit value 2
(1)如果是初搭环境,运行失败。可能是安装包路径有空格的原因。
(2)如果以前运行项目正常,楼主标红部分,我不知道问题出在哪。但只看问题标题的话,有的是因为项目路径为汉字的问题(我今天就遇到了,把项目换个全英文的路径就可以了)
删掉v4包就行了 有相同包了,注意finished这句话,删除包,
如果还不行的话加上multiDex的配置
defaultConfig {
applicationId "com.kuyu.kuxianghui"
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "1.0"
multiDexEnabled true
}
就是下面的这段代码结局我的问题
multiDexEnabled true
29java.lang.IllegalArgumentException: Wrong arguments were passed to displayImage() method (ImageView reference must not be null)
一看到这个错误,头脑里面第一条件反射就是参数传错了,但是我的确传了URL和imageView ,url有值,但是imageView那肯定没有值,原来我只把imageView定义了,没有初始化,没有findviewById(R.id.imageView);下次要记得
30 org.json.JSONException: End of input at character 0 of
10-23 21:28:11.288 7528-7528/com.kuyu.kuxianghui I/treeMapToString﹕ 199cf7bdf2dd4ea0da93cb53558e79a7
10-23 21:28:11.288 7528-7528/com.kuyu.kuxianghui D/MD5Util﹕ BAC23EF0AEDF28F7D4CE38A9D620A75D
10-23 21:28:11.298 7528-7528/com.kuyu.kuxianghui I/postUrl﹕ http://10.68.5.30/api/distributorCall?jsonParam={"sign":"BAC23EF0AEDF28F7D4CE38A9D620A75D","map":{},"openType":"getCaptcha"}
10-23 21:28:11.298 7528-7528/com.kuyu.kuxianghui I/kuxianghui﹕ url:http://10.68.5.30/api/distributorCall?jsonParam={"sign":"BAC23EF0AEDF28F7D4CE38A9D620A75D","map":{},"openType":"getCaptcha"}
10-23 21:28:11.318 7528-10533/com.kuyu.kuxianghui I/kuxianghui﹕ post Params:{jsonParam={"sign":"BAC23EF0AEDF28F7D4CE38A9D620A75D","map":{},"openType":"getCaptcha"}}
10-23 21:28:11.338 7528-7528/com.kuyu.kuxianghui I/errorMessage﹕ org.json.JSONException: End of input at character 0 of
原来我把opeType写成了openType 该死的 找了好久才找到错误
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
at com.android.dx.command.dexer.Main.main(Main.java:245)
UNEXPECTED TOP-LEVEL EXCEPTION:
at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
at com.android.dx.command.Main.main(Main.java:106)
at com.android.dx.command.dexer.Main.run(Main.java:277)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:502)
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_60\bin\java.exe'' finished with non-zero exit value 2
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
com.android.dex.DexException: Multiple dex files define Lcom/tencent/a/a/a/a/a;
解决办法
defaultConfig {
applicationId "com.kuyu.kuxianghui"
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "1.0"
multiDexEnabled true
}
就是下面这行代码起到了作用,惊叹吧
multiDexEnabled true
res\drawable-mdpi-v4\guide_1.png:0: error: Resource entry guide_1 is already defined.
res\drawable-mdpi-v4\guide_1.jpg:0: Originally defined here.
Error:Execution failed for task ':app:processDebugResources'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'E:\Android\sdk\build-tools\23.0.0\aapt.exe'' finished with non-zero exit value 1
资源一开始就有
解决办法
build ->clean project
<pre name="code" class="html">Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT)
没反应
我插,我在最后忘记写.show()了,妈的,下次一定要记得,忘记了要打死自己。
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
原来是我写的
Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show()
没有放在ui线程里面,所以出现这个异常,用handler去处理然后再调用就可以。
35、java.net.SocketTimeoutException: Read timed out
原因:客户端没有在限定的时间内将数据发送给服务器,服务器为了保证服务性能,认定那个连接已经失效,所以出现上述异常。
解决办法:增大客户端的超时时间。
System.setProperty("sun.net.client.defaultConnectTimeout", String
.valueOf(10000));// (单位:毫秒)
System.setProperty("sun.net.client.defaultReadTimeout", String
.valueOf(10000)); // (单位:毫秒)
36、android:showAsAction="never"在as里面的menu.xml里面不可以用
解决办法:改成 app:showAsAction="never"就可以了
37、当我们把github里面的模块拷贝到项目的时候,发现那个导入的包 前面是白色 后面是红色 ,一直找不到原因,后来终于找到了
解决办法:
在app build.gradle里面忘记添加 compile project(':mplib')
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.0'
compile project(':mplib')
}
Error:Execution failed for task ':app:processDebugResources'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Users\Think\AppData\Local\Android\sdk\build-tools\23.0.0\aapt.exe'' finished with non-zero exit value 1
资源文件错了,不能识别pd
39、
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxxx cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{43557be8 8101:com.kuyu.kuyucontact/u0a81} (pid=8101, uid=10081) requires android.permission.CALL_PHONE
分析原因:
由于我的应用要拨打电话,所以需要配置相应的权限信息
解决办法:
需要在(功能清单文件中)AndroiManifest.xml Application外添加<uses-permission android:name="android.permission.CALL_PHONE"/>
40、今天程序报了这个异常
Unable to start activity ComponentInfo{com.kuyu.kuyucontact/com.kuyu.kuyucontact.ui.UserInfoActivity}: java.lang.NullPointerException
空指针啊,没有拿到数据,我还以为是我的bundle出了问题,妈的,原来findViewById(R.id.tv_name),tv_name 这个id在其它地方命名了,所以才会出现
Unable to start activity {.ui.UserInfoActivity}这个异常啊,麻痹的,以后切记。
have you declared this activity in your AndroidManifest.xml
没有注册Activity
duplicate registration for activity
重复注册了Activity,认真检查哪个地方已经注册了
android.view.InflateException: Binary XML file line #13: Error inflating class com.wingsofts.simplelinechart.SimpleLineChart
自定义的时候,上面那个包名写错了
用eclipse 开发 android应用时出现个错误,“your project contains error(s),please fix them before running your application”
解决办法:
使用eclipse写好Android的代码,代码没有报错。想在AVD中运行测试时,总是会弹出错误框,提示信息为:
“Your project contains error(s),please fix them before running your application.”
不管是重启AVD 重启eclipse 甚至创建一个新的Android工程项目都不能运行
上网查找原因,有几种可能:
1.在不同的电脑下开发,而且文件存放路径不同,错误的主要原因是 “.classpath” 文件的载三方类库包路径错误。
2.也可能是你的SDK版本不存在或者没有。
3.编译的class、apk文件有问题:执行清除一下就可以了。Project→Clean→Clena Projects Selected Below 选择你出错的项目就可以了。
4.有可能就是最重要的这一点:
在Program提示框中会提示:
“Error generating final archive: Debug Certificate expired on 12-7-25 下午7:52”
原因分析:
android要求所有的程序必须有签名,否则就不会安装该程序。在我们开发过程中,adt使用debug keystore,在 preference->android->buid中设置。debug的keystore默认有效期为一年,如果你是从一年前开始完android程序,那么在一年后导入这个app的时候很可能出现debug keystore过期,导致你无法生成apk文件。
此时你只要删除debug keystore就行,系统又会为你生成有效期为一年的私钥。
解决方法:
进入C:\Documents and Settings\Administrator\.android 删除路径下的debug.keystore及ddms.cfg。
(不同环境下的目录可能略有不同,可在eclipse中查找此路径:Window->Preferences->Android->Build下 Default debug keystore)
我出错的原因是第4种,我直接删除了.android 文件,成功解决问题
[2016-02-20 09:38:37 - aWork] Unable to resolve target 'android-22'
解决办法:
出现 “Unable to resolve target 'android-XX'”,解决办法进入你的android project跟目录,找到此文件 project.properties(或default.properties),找到target=android-XX出现此错是因为你的android环境跟此处不对应,那么,你只需要将此处的android版本改成你机器上配置的android版本即可,例如target=android-15
进入activity类中,一些重写的方法的地方总是出现 "Remove @Overrideannotation",解决办法:出现此错误的原因主要是 编译器 版本的 的问题,Java 1.5的编译器默认对父类的方法进行覆盖,采用@Override进行说明;但1.6已经扩展到对接口的方法;所以如果还是以Java 1.5的编译器来编译的话,会出现错误,默认是java1.5的,你需要将它设置到1.6打开你的eclipse,进入 window->Preferences->Java->Compiler 把它改为 Java1.6即可
46 把项目导入eclipse出现乱码问题
解决办法:
1.编码不对
a.对某文件或某工程更改编码:
鼠标移到工程名或文件名,右键->Properties->Resource->Text file enCoding ->更改编码(GBK、UTF-8等)->Apply->OK退出
b.修改整个命名空间的编码
eclipse菜单栏->Window->Preferences(preferences一般就是修改各种eclipse设置的地方)->General->Workspace->text file encoding ->更改编码(GBK、UTF-8等)->Apply->OK退出
c.修改某个特定类型的文件(如xml文件、java文件类型)的编码(不会受命名空间编码的影响)
eclipse菜单栏->Window->Preferences->General->Content types->在右视图中选在文件类型->在Default enCoding中选择语言->Update->Ok退出
注意:若下拉菜单栏里面没有你要的语言类型,可以自己用键盘打一个进去。如果没有改语言类型,eclipse自然会报错,没有报错就说明可以用改语言类型。
2.maven的问题
eclipse菜单栏->Window->Preferences->Maven->Installations->User Settings->导入maven的settings.xml文件->Refresh
但是目前maven为什么会导致乱码不知道- -
3.两个工程不同编码方式放到一个工作空间里面有可能会有冲突。可以尝试着别放到一个工作空间里面看看可不可以解决问题
47、[2016-02-20 17:13:44 - aWork] ERROR: Application requires API version 21. Device API version is 16 (Android 4.1.1).
[2016-02-20 17:13:44 - aWork] Launch canceled!
解决办法:
原因是应用程序的版本跟模拟器的版本不一致导致的。
解决方法:修改两个配置文件
1:在AndroidManifest.xml里, <uses-sdk android:minSdkVersion="8" />找到这一行,这行是表示要执行这个应用程序所需要的最低版本,把数字改成低于模拟器上面的版本。
2:在default.properties里target=android-14把target改为要运行模拟器的版本就OK了。
48 Failed to install*.apk on device '': timeout
解决办法:
前提:
1.adb shell是没问题,排除数据线
2.eclipse的ddms中是有设备的
3.模拟器安装N个程序是没问题的,排除程序问题
自己找到解决方法:
1.替换数据线
2.去掉延长线
3.修改windows-per-android-DDMS 5000改为10000,50000
4.工程文件clean
5.因为使用的是真机,所以不存在删掉C盘中的某些*.lock文件夹
天调试android,突然报了这个错误,很是郁闷,
意思是:把程序安装到设备失败,超时了。
研究无果,一阵搜索,最后可以通过设置eclipse解决问题,
在window->preferences->Android->DDMS->ADB connection time out (ms):
设置这一项,把值设高一些 我设置了1000000
49 adb logcat -v threadtime > xxx.log
C盘-》用户-》C里面
50 The connection to adb is down,a severe error
解决办法:adb kill-server
adb -startserver
51 判断游标是否为空
SQLite中的Cursor千万不能使用Cursor == null 来判断是否为空,即便Cursor中什么记录都没有,他也不会是空(已测试)。
判断是否为空的方法是 Cursor.getCount()这么一个简单的函数,如果是0,表示Cursor为空;如果非0,则表示Cursor不为空。
51 我们用SimpleDateFormat 需要注意的问题
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日hh:mm");表示是12小时制
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm");表示是24小时制
52 在相对布局里面 如果要把一个控件放在另一个控件的左边 记得使用 android:layout_toLeftOf="@+id/scan_code_image"
53 android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 5
自己写游标的时候,明明需要循环便利游标,而我没有加上循环,所以就出现了这个问题
if(cursor != null) {
// 循环遍历cursor
while (cursor.moveToNext()) {
53 android.app.application cannot be case to package.ShotApplication
错在 AndroidManifest.xml里面
<application
android:name ="com.wang.capurescreen.ShotApplication"
我没有写name,所以错了,要记得加上
54 今天运行代码的时候出现了missingFormatArgumentException异常
使用string.format("aaa%d, dsaa,""%d",a)
很明显多了一个d%.
匹配不正确 。
55 java.net.socketimeoutexception
设置超市时间短了,settimeout时间久点就可以了
56 stException: com.example.dexclassloaderactivity.MyApplication cannot be cast to android.app.Activity
原因:我把在Android配置文件里面application里面的声明改到了activity里买去了,下次不要犯这个错误,写了applicaiion一定要记得写配置切记。
在短视频火爆、5G时代的到来,不学点媒体的
开发
怎么说的过去呢?
本人入门
Android
相机
开发
不久,在此记录一下
踩
过的坑(以下总结局限于当时的个人认知以及基于当时相关版本的API)。
在
Android
里的相机
开发
里边,可能会遇到各种各样的问题,比如
在打开相机之前的权限申请
选择CameraX、Camera2还是第三方相机库?
选择surface、texture还是glsurface来预览?预览黑屏怎么办?
录制分辨率选择多少?预览宽高比怎么设置?预览变形这么办?
前置摄像头拍照、录像
在使用
notify
Item
Remove
d()这个方法时,由于该方法不会使position及其之后位置的
item
View重新onBindViewHolder,重新刷新后面的数据会导致下标错乱。有可能产生一些坑爹的bug。解决方法,通知其后数据刷新,并且一定要记得移除源数据源中要移除的数据。
mDeliveryOrderList.
remove
(i);
mDeliveryAdapter.
notify
Item
Remove
d(i);
if (mGetPosition != mDeliveryOrderList.
引言:在项目中经常使用RecycView,以往刷新数据的做法,
notify
DataSetChanged,简单粗暴。并且不会有插入删除动画,为了更好的体验,一般会使用
notify
Item
Remove
d(),
notify
Item
Inserted() 自带动画效果,体验+,但是你会发现,删除错位,甚至数组下标越界。why??? !请看下文
一、先说解决方案:在调用
notify
Item
Remove
d()或
notify
Item
Inserted() ,记得调用
wAdapter.
notify
Item
Range
..
【雷电模拟器 Appium自动化测试启动app报错 java.lang.SecurityException: Permission Denial: starting Intent 】
java.lang.IndexOutOfBoundsException:
Inconsistency detected. Invalid view holder adapter positionViewHolder{424b7690 position=7 id=-1, oldPos=8,pLpos:8 scrap tmpDetached no parent} at
android
.support.v7.widget.RecyclerView
RecyclerView很多时候是展示静态的数据,并不会有删除的操作,讲到RecyclerView时,会提到它提供了一个很好的展现删除操作动画的函数,代码片段一般是这样的
@Override
public void onBindViewHolder(final CommonViewHolder holder, final int position) {
问题描述:
在跟着《第一行代码》第二版学习抽屉布局时报出这样的错误:
Cannot resolve class
android
.support.v4.widget.DrawerLayout
但我已经在build.gradle里面引入了依赖包了:
不过就如上图所示,报错了。
然后按照百度一些分析,将
Android
support迁移成
Android
x也依然有问题
什么是
Android
x,什么是
Android
su
RecyclerView直接调用
notify
Item
Remove
d(position)移除指定位置的
item
,第一次没问题,当你滑动或者再次删除是就会报异常导致奔溃。原因
因为
notify
Item
Reomoved只是把对应的position的
Item
给移除掉,下面的已经显示的
Item
向上平移而已,并未重新调用onBindViewHolder方法重新绑定数据,当你再次操作其中的数据时,就会出
这篇文章其实之前就完成了,一直遗忘在角落里了,今天无意翻之前的笔记发现的,大部分内容应该还是有效的。
之前在使用RecyclerView的遇到过一个问题,使用
notify
Item
Changed刷新数据的时候会出现重影或者闪烁的现象。
这个问题很容易出现,当我们的列表中有进度显示(比如下载),这时候需要不停的更新进度,就需要使用
notify
Item
Changed
使用
notify
Item
Changed可以只刷新那一个
item
,这样就避免了像ListView那样全部刷新
但是如果使用
notify
Item
C
近来在做一个
Android
项目,用到了RecyclerView。相比ListView单调的
notify
datasetchanged,RecyclerView在添加/删除
Item
时有多种方法可以选择。
例如:添加
Item
可以用
notify
Item
Inserted和
notify
Item
Range
Inserted,删除
Item
可以用
notify
Item
Remove
d和
notify
Item
Range
Re
问题1:最近在项目中遇到一个 物理键盘焦点异常 的问题,每次切换
item
的时候,焦点总会跳到第一个
item
的位置,看来看去,原来是这个界面使用了 RecycleView 的问题。在更新数据的时候,调用了 RecyclerViewAdapter.
notify
DataSetChanged(),更新了所有
item
。
解决方法:只更新被选中的
item
,调用 RecyclerViewAdapter.n...
Executing tasks: [:app:DownloadSources] in project C:\Users\Administrator\Desktop\frameworkAPI\a133\XStarAPI\app > Task :app:DownloadSources FAILED FAILURE: Build failed with an exception. * Where: Initialization script 'C:\Users\Administrator\AppData\Local\Temp\ijmiscinit.gradle' line: 25 * What went wrong: Execution failed for task ':app:DownloadSources'. > Could not resolve all files for configuration ':app:downloadSources_d775df64-246f-45d3-ba50-36ae7a6ee94f'. > Could not find C:sources:. Required by: project :app * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 838ms 1 actionable task: 1 executed