一路追梦想

热爱技术,更热爱生活


  • 首页

  • 关于

  • 标签

  • 归档

React Native基础之语法总结

发表于 2017-09-17 | 分类于 ReactNative

前言

最近因为工作需要,开始学习React native,虽然以前学习过js,但都是上大学时候的事了,几年没关注这块了,现在又衍生出很多以js为基础的框架或者编程语言,习惯了Java,现在开始学习React native,最大的两点感觉:

  • React native语法感觉好随意
  • 代码看起来好乱啊

不过既然要开始学习了React native了,就要搞清楚里面的方方面面。通过查看官方文档,Google搜索,大概整理了一些React native中容易忽略的基础东西(本文基于最新的ES6语法)

变量

变量感觉React native和Java或者Python还是有挺多不一样的地方的,作为弱类型语言,React native里面竟然有三个定义变量的关键字:var,let和const

阅读全文 »

Android上传Library到JCenter可能遇到的问题

发表于 2017-03-29 | 分类于 Android

这并不是一篇教你如何step by step上传Android Library到JCenter,因为你随便搜一下,都会发现很多那样的文章,而且几乎都大同小异(互相抄)。正式因为抄来抄去,可能很多人并不会深究这个教程有什么问题,自己按照这个教程能够达到目的吗,可能会遇到了什么问题?本文的主要目的就是结合自己完成的过程告诉你按照网上的大部分教程你可能会遇到什么问题,当你因为参考网上大多数教程而又一直失败正在抓狂的时候,看看本文也许有帮助。

问题一:在bintray.com上注册自己的账号

大部分教程都是告诉你打开https://bintray.com/然后注册一个账号,然而随着bintray的更新,你现在打开该网站看到的是这样的(截止2017年03月29):

你可能有点懵,为什么注册账号看起来还要钱,当你点击START YOUR FREE TRIAL去注册的时候,你其实已经进入了团队账号注册,类似于企业账号,所以你会发现会让你填写Company Name和Organization ID,除此之外和注册个人账号都一样了,如果你是这样注册的,等你按照网上大多数的教程step by step往下走的时候,你会发现到最后执行上传命令的时候,一直出现这样的错误:

1
HTTP/1.1 401 Unauthorized [message:This resource requires authentication]

按照网上的教程你以为是用户名或者apikey填错了,但是你会发现你怎么改都没用

正确的个人账号注册方法是点击START YOUR FREE TRIAL下方的For Open Source Distribution Sign Up Here来Sign Up,细心的你可能会发现,二者的注册地址是不一样的,企业的注册地址是https://bintray.com/signup,个人账号的注册地址是https://bintray.com/signup/oss

这个坑浪费了我很多时间,当然也不是说如果按照企业账号注册最后就不能完成上传,一样可以,但是网上的教程几乎都是针对个人账号而言,如果你注册的是企业账号按照网上的教程是一定不能成功的,因为企业账号需要配置组织名称。

问题二:artifactId要和Library module的名字一样

当你到最后上传Library到JCenter的时候,你可能会遇到这样的错误:

1
2
HTTP/1.1 400 Bad Request [
message:Unable to upload files: Maven group, artifact or version defined in the pom file do not match the file path...]

网上大多数可能会说是要artifactId要和libraryName保持一致,其实是artifactId要和你要上传的Library module的名字保持一致

阅读全文 »

网络判断isConnected在网络正常的情况下依然返回false?

发表于 2017-02-21 | 分类于 Android

最近在测试一个功能的时候,偶然发现,网络连接都正常且能上网的情况下,居然提示网络不通,最开始以为只是偶然情况,就没太在意,后来发现能够重现,然后就决定研究一下,还真研究出一些问题

查看代码

然后就看了一下程序判断网络是否连接的这一块代码,代码如下,很简单也很常规:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 判断网络是否连接
*
* @param context
* @return
**/
public static boolean isNetworkConnected(Context context) {
try {
ConnectivityManager connectivityManager = (ConnectivityManager)
context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected;
} catch (Exception e) {
return false;
}
}

这就是普通的判断网络是否连接(注意,只是判断是否连接,至于能不能上网并不能判断)的,用的也都是Android自身的API来判断的,按说没有什么问题啊,但是就是这个方法一直返回false。。。

阅读全文 »

Android自定义进度条时padding无效果?

发表于 2016-10-26 | 分类于 Android

前言

标题很简单,自定义带padding的水平进度条,也就是如下效果的进度条:

其实很简单,但是因为有一个坑还是要提出来,话不多说了,首先看看正常的实现:

常规方案

首先是布局文件中放一个ProgressBar控件:

1
2
3
4
5
6
<ProgressBar
android:id="@+id/custom_horizontal_progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="16dp"
android:progressDrawable="@drawable/progress_bg_drawable"/>

补充:为了更直观,我直接将16dp写到了布局文件中,规范写法这些值要放到dimen资源文件中引用

阅读全文 »

工作中常用的一些shell命令

发表于 2016-10-21 | 分类于 Shell

开发人员掌握一些常用的命令,对于提高效率(B格)是很有帮助的,本篇文章记录下平时工作中常用的shell命令,同时也是为了测试一下新安装的markdown editor插件

查看签名文件信息

当我们想查看一个签名文件的md5等信息的时候,这个命令就很实用了,现在的一些应用市场认领应用啊,接入一些第三方的sdk啊,一般都需要apk的签名信息

1
keytool -list -v -keystore debug.keystore

压缩命令

平时打完渠道包发给商务运营人员的时候,这个命令很常用

1
2
3
4
5
6
7
8
//压缩文件a.apk到a.zip中
zip a.zip a.apk

//压缩文件夹a到a.zip中
zip -i a.zip a

//加密压缩文件a.apk
zip -e a.zip a.apk

grep命令

1
2
3
4
5
6
//grep 查找某个字符串
grep -rin baidu ./ 查找当前目录下所有包含baidu字段内容,并显示行号
//grep 查找包含某个字符串的文件
grep -rl baidu ./ 查找当前目录侠所有包含baidu的文件名
-r 递归 -i 忽略大小写 -n显示行号(从1开始)
-l --files-with-mathches -L --file-without-mathch

比如当平时Android手机发生应用FC的时候,我们可以通过grep命令去在杂乱logcat找出crash信息:

1
2
3
4
//抓取crash logcat信息(-A显示结果附近20行)
adb logcat | grep -i "FATAL" -A 20
-A num, --after-context=num 搜索内容后面显示多少行
-B num, --before-content=num 搜索内容前面显示多少行

查看activity任务栈信息

主要用于查看当前正在运行的任务栈信息,有助于分析activity的各种启动模式

1
adb shell dumpsys activity activities | grep -i run

删除空文件

1
find . -type f -size 0 -delete

上面这些都是自己日常开发中经常用到的命令,熟练掌握这些命令是很有帮助的,如果想查看每个命令的更多用法可以使用man xxx去看官方用法说明

Android UI测试框架Espresso

发表于 2016-04-17 | 分类于 Android

前言

最近这两周工作相对不那么忙了,所以就抽空结合官方文档研究了一下Android UI测试框架Espresso,从框架的setup到测试用例编写到执行测试用例

简介

Espresso是Google官方推出的开源UI测试框架,它的特点就是简洁,很容易上手编写测试用例,而且关于UI测试Espresso支持的也越来越完善了
官方项目地址:点击查看Espresso测试框架详细信息

安装

在dependencies里面添加引用

1
2
3
4
5
6
7
8
// App dependencies
compile 'com.android.support:support-annotations:23.0.1'
// Testing-only dependencies
// Force usage of support annotations in the test app, since it is internally used by the runner module.
androidTestCompile 'com.android.support:support-annotations:23.0.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'

在android.defaultConfig设置instrumentation runner

阅读全文 »

Android getIdentifier用法

发表于 2016-03-31 | 分类于 Android

前言

最近这段时间在忙着开发一个Android游戏,当然并不是真正的游戏,只是一个伪游戏而已,因为应用需要的图片资源和布局都比较多,所以难免就出现了下面这种类型的代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
switch (index) {
case 1:
mView = mInflater.inflate(R.layout.layout_gift_one, null);
break;
case 2:
mView = mInflater.inflate(R.layout.layout_gift_two, null);
break;
case 3:
mView = mInflater.inflate(R.layout.layout_gift_three, null);
break;
case 4:
mView = mInflater.inflate(R.layout.layout_gift_four, null);
break;
case 5:
mView = mInflater.inflate(R.layout.layout_gift_five, null);
break;
case 6:
mView = mInflater.inflate(R.layout.layout_gift_six, null);
break;
}

对于我这种有代码洁癖的人,每次看到这种代码我心里着实是不舒服的,今天上午写代码的时候,遇到一个这样的需求,简化一下大致是这样的:

需求

有6个textview用于显示6种商品的数量,然后定义了一个长度为6的数组用于存放6种商品的数量,那么有一个需求是要在特定的条件下将6种商品的数量置为0,同时在textview显示

阅读全文 »

URLConnection.setDoOutput(true)导致Get请求变Post请求?

发表于 2016-02-18 | 分类于 Android

前言

在写一个服务器下载图片并保存到SDcard上的基本功能的时候,部分代码自然而然地写成这样:

1
2
3
4
5
6
7
8
9
10
11
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.connect();

String path = BeautifyUtil.getDownloadsWallpaperPath();
File file = new File(path + "/" + mWallpaperInfo.getFileName());

FileOutputStream fileOutput = new FileOutputStream(file);
InputStream inputStream = connection.getInputStream();

当时还特地看了一下setDoOutput()方法的源码说明

阅读全文 »

ViewPager+Fragment+自定义Tab的使用

发表于 2016-01-12 | 分类于 Android

我们知道,Google在Android Design Supprot Library增加了很多Material Design控件,使我们能够更加轻松地开发出很多美观又灵活的UI。

其中新增的Tabs就是一个很实用的控件,我们可以使用Tabs+ViewPager+Fragment写出很多实用的控件,如图一所示,关于Tabs控件的更多信息,大家可以阅读官方文档:点击这里

但是,有些时候我们的需求可能不是正好会和官方提供的控件相吻合,受限于这些官方Material Design控件都是遵循固定的设计标准,有些时候我们不得不自己重写控件,或者寻求其它实现方式,比如如图二所示的UI:

因为官方的Tabs控件每个Tab是有最小宽度的(看源码好像是56dp),也就是说无论你字体设置多小,每个Tab的最小宽度都不会变,而且图二在Tab的右边还要添加一些单个的控件,这个时候显然我们自己定义Tab布局,然后结合ViewPager和Fragment使用起来更方便,图二中的每个Tab项的宽度我们可以随便调,在右边可以随意添加单独控件

阅读全文 »

生病这半月

发表于 2015-12-20 | 分类于 Twitter

第一天

11月27号,周五,上班的时候感觉要有点感冒,心想昨夜打球可能着凉了,想着多喝点开水,也许就不会感冒了!

第二天

11月28号,周六,在家睡觉不想起,感觉浑身很冷,想着可能有点发烧,拿出体温计量了一下38度多,难受了一整天,到夜里都接近39度了,喝了点感冒退烧药就睡去了,心想明天还发烧一定要去看医生。

第三天

11月29号,周日,依然发烧,并且开始咳嗽,因为四月份刚来杭州,这是来杭州第一次生病,也不知道附近哪里有看病的地方,想着一个感冒发烧也用不着去大医院吧,手机搜索了一下,附近不远有浙江大学紫金港校区医院,心想校医院就可以了吧,于是下午就去了浙大紫金港校医院,可能是因为周末的缘故,里面人不多,医生也不多,很多科室都是没人的,只有值班的在急诊室,于是挂号去看病,(之前在深圳工作的时候看病只需要一个医保卡就可以了,在杭州也办理了市民卡,也就是医保卡,没想到试用的时候还需要病历本,于是医保就没用成),到了急诊室,医生问了一点情况,让先量个体温,38.7度,医生说怎么温度这么高,让去化验血,于是就去化验血(其实这些套路,我都清楚,上大学的时候发烧到校医院也是会让去验血),验血说超敏高出十多倍,于是让输液,我想着输完液应该就没事了吧,我本身也就是要来输液的,因为之前每次发烧都是会输液的。医生还给开了两片退烧药,并告知明天要来复查一下血,我心想难道一天就可以输好吗,以前每次发烧去看病,医生都会让输两天液,输完液出来天已经黑了,但是我并没有觉得有什么好转,心里还想着可能没那么快,夜里回去睡个觉就好了,但是夜里回去依然很难受,依然高烧,吃了一片退烧药还是高烧接近39度,整夜睡不着,心想明天肯定是上不了班了,还是要输液。

阅读全文 »
123…7
picksomething

picksomething

专注Android,Java,RN,Python

65 日志
17 分类
148 标签
RSS
© 2018 PICKSOMETHING
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4