Trap Record (录坑)

1、

问题场景: 最近有一个需求,需要根据后台返回,动态改变弹出框中的内容,于是就用了自定义布局来设置AlertDialog的view

 

LayoutInflater inflater = LayoutInflater.from(context);
View alertDialogView = inflater.inflate(R.layout.title_dialog_bindaccount, null);
TextView bindTips = (TextView)alertDialogView.findViewById(R.id.bind_tips);
TextView bindImei = (TextView)alertDialogView.findViewById(R.id.bind_imei);
AlertDialog bindAlertDialog = new AlertDialog.Builder(SystemActivity.this)
        .setView(alertDialogView)

刚开始的做法是将自定义view定义为全局变量,这样方便每次在Activity创建时,根据后台获取的值来修改其中内容,但是在调试时,发现点击第一次正常,点击第二次GG,报错:

AndroidRuntime: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

刚开始还有点不明白,后面一顿查阅分析,才渐渐明白这个AlertDialog 和 Actvity存在父子关系,定义为全局之后,每次点击创建Dialog都会绑定一次,第二次点击就是重复addView了,所以会提示要先removeView。刚开始还想着真的去找removeview的方法,后台才看到别人的建议,在每次点击响应的时候去改变view里面的内容才是合理的,因为AlertDialog每次都会创建,其中的view也不应该定义为全局的。

 

 

2、eclipse 工具java 工程导入问题。

Eclipse的工作空间workspace之前运行过一个工程,后期将其删除,从eclipse里面。 今天从github将同一个工程下载后,

通过import java project方式导入后,修改代码,运行始终无效,最终发现运行的还是老的workspace里面的该工程。。。。。

 

 

3、通知栏Notification无法使用矢量图:

最后还是只能乖乖地在各个分辨率目录下增加png图片来引用,仍然不知道原因,who know why ?

 

 

4、小米手机权限坑

 

在debug版本的app中,android:targetSdkVersion="25", 只在manifest中申明了获取存储权限,小米手机安卓7.0版本始终报如上错误,也不显示permission deny, 就是在创建文件时让你创建不了。 当时以为是自己没有动态申请权限造成,但是增加了之后也无济于事,也不弹框。 搜集资料,调试半天,都无效果。偶然间使用了同样代码编译的release版本,完全正常。

对比在华为安卓8.0系统上尝试,不管是debug还是release版本都正常,这个坑让我调试了一上午,不知道是否小米对于debug版本的app的特殊关照?

 

存储权限应该是属于危险权限。

 

 

5、神鬼莫测的编译打包release问题:

 

 com.android.dex.DexException: Multiple dex files define Landroid/support7/recyclerview/BuildConfig;","sources":[{}],"original":"UNEXPECTED TOP-LEVEL EXCEPTION:\ncom.android.dex.DexE

某一天在打包release版本的app时,突然在最后报错,尝试各种clean, 重启,都无效果。 网上的说法是有重复引用jar包造成,

但是查了一通,没有发现。 最后鬼使神差地修改了gradle里面的targetSdk version, 忽然编译成功, 改回来之后也还是编译成功。who knows why ?

 

 

6、 安卓数据库cursor 访问问题

 

初看这个代码有没有问题? 感觉没问题,但是一运行, 哎呀妈啊,为啥总是报 IndexOutOfBound错误,Index -1 requested, with a size of 1,仔细检查所有字段都是存在的,为啥呢?

原来查询得到的cursor是指向第一条记录之前的,因此查询得到cursor后第一次调用moveToFirst或moveToNext都可以将cursor移动到第一条记录上。

你少了一句 cursor.moveToNext();  骚年!!!!!!!!!

 

 

 

7、 IOS开发中在使用table view 默认风格显示图片时,imageview 中无法正常显示图片,由于是刚开始学习,总以为是自己对于控件的接口使用问题:

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];

    //row

    NSUInteger row = [indexPath row];

    

    //label text

    NSDictionary *dic= self.listTeams[row];

    cell.textLabel.text = dic[@"name"];

    cell.detailTextLabel.text = dic[@"image"];

    NSString *imagePath = [[NSString alloc] initWithFormat:@"%@.png", dic[@"image"]];

   cell.imageView.image = [UIImage imageNamed:imagePath];

   但是搜索了些别人的使用方法,感觉并无不妥。最终冷静下来定位分析是否数据源本来就没有找到导致,果然通过bundle 查找资源路径输出一直未null, 难怪资源文件都找不到,怎么让别人给你显示图片?

但是关于资源的引用之前已经尝试过,然后在网上确认了下之前的两种方式:

Copy items if needed
勾选,会将资源文件拷贝到项目中(项目文件夹)
不勾选,只会保存一个对这个文件的引用,并不会拷贝到项目中去。如果项目目录更换了路径,一般会编译失败,除非再次引用资源文件句号
备注:在一般开发中这个选项是一定要勾选的


Added folders:Create groups
如果资源文件是目录的话,为资源文件创建组。当拖动一个包含资源文件的目录到项目中时,选择这个条目之后,在代码中引用资源文件就只需要直接写资源文件的路径,不用加上目录了。
备注:在Xcode项目中,文件夹有两种颜色:黄色和蓝色。黄色代表的组,表明在项目文件中并没有实质性的文件夹,代码中可以直接通过文件名来获取资源。蓝色代表实体文件夹,表明在项目中存在着实质性的文件夹,代码中则需要通过深入目录来获取到资源文件。


Added folders : Create Folder reference
和上面的group选项相反,当拖动的是一个包含资源文件的目录时,会创建实质性的目录(显示为蓝色),代码中需要使用资源文件的时候路径必须带上目录。

例子:如果项目文件中有个实体目录test/test1.h,在Xcode中test目录显示为蓝色,那么则需要#include"test/test1.h";如果为黄色,则需要test1.h就可以了


简单来说create group 可以直接通过文件名称访问,而且从测试情况来看,只是建立了引用,源文件被删除后,编译会报错;

create folder reference 是将整个目录放置进来,源文件删除不影响,但是访问文件资源时需要全路径,不能靠名字区分了。

 

虽然这个资源文件的访问方式大体已经了解,但是万万没想到,直接通过文件名称的访问方式还不支持png这种后缀,在使用接口:

    NSString *pngPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"png"];

此路径始终为空,但是如果换一个html文件或者txt文件,就可以访问到,又百思不得其解。然后换个思路,将png图片资源文件放置到一个目录中,然后将这个目录以第二种方式的资源引用放入到工程,最后使用全路劲进行访问,结果柳暗花明又一村,文件路径就出来了:

    NSString *pngPath  = [[NSBundle mainBundle] pathForResource:@"test.png" ofType:nil inDirectory:@"pic"];

    NSLog(@" png path is %@", pngPath);

2019-05-21 16:33:33.034913+0800 12_TableView[17500:814706]  png path is /Users/hongboni/Library/Developer/CoreSimulator/Devices/ED01C132-C7F2-4966-9732-14711B50513D/data/Containers/Bundle/Application/206283E3-0903-413B-A181-B04617DA2ADB/12_TableView.app/pic/test.png

目前只能猜想就是工程对于图片资源要求放置在目录下了,谁叫自己现在还是菜鸟阶段,只能在这种摸索中踩着自己挖的坑,因为无知而犯下的年少轻狂的错误造成的需要花费很长时间来分析的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值