Friday, October 30, 2015

Android webview input 无法打开输入框?



error:
今天遇到一个奇葩的问题,就是我用Webview 加载了一个网页的页面的时候,点击input 的时候 手机APP 无法弹出输入法! 纠结了好长的时间。

貌似Android 本身确实存在这个问题:
你可以查看一下这篇博客:
http://jojol-zhou.iteye.com/blog/1299017

但是,我的情况博客并没有给出解决方案:
我以为是Androidmeanfest.xml 中的文件中Activity  指定的输入法的模式有问题,我看了一下并没有隐藏。 其实只要不设置,默认的状态就可以的!
我们具体学习一下:  

【Android开发经验】android:windowSoftInputMode属性详解

http://blog.csdn.net/zhaokaiqiang1992/article/details/39761461

问题依然没有得到解决:
然后我参考了这篇博客:
http://blog.csdn.net/tu_bingbing/article/details/41810473


将我自定义的Webview 改写成:
public class ProgressBarWebView extends WebView{

    public ProgressBarWebView(Context context) {
        this(context, null);
    }

    public ProgressBarWebView(Context context, AttributeSet attrs)    {
        this(context, attrs, com.android.internal.R.attr.webViewStyle);
    }

    public ProgressBarWebView(Context context, AttributeSet attrs,     int defStyle){
        super(context, attrs, defStyle);
        // TODO
        // your code
    }
}

这种做法是正确的,但是我用Android studio complie 的时候,不能运行,这就比较蛋疼了。

解决方案:
不要使用自己的自定义的webview. 使用原生的Webview 
<WebView    android:id="@+id/webview_announcement"    android:layout_width="match_parent"    android:layout_height="match_parent"    />

然后设置:
private void initWebViewSetting() {
    WebSettings webSettings = mWebView.getSettings();    if(null != webSettings){
        webSettings.setJavaScriptEnabled(true);        webSettings.setDomStorageEnabled(true);        webSettings.setAppCacheEnabled(true);        webSettings.setSaveFormData(true);        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);        webSettings.setSupportMultipleWindows(true);        webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);        webSettings.setAllowFileAccess(true);        webSettings.setNeedInitialFocus(true);        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);        webSettings.setLoadWithOverviewMode(true);        webSettings.setLoadsImagesAutomatically(true);        webSettings.setLoadWithOverviewMode(true);        mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);        //启动硬件加速        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);        }
    }
}

我们看一下 webview 源码就知道了为什么?
/** * Construct a new WebView with a Context object. * @param context A Context object used to access application assets. */public WebView(Context context) {
    this(context, null);}

/** * Construct a new WebView with layout parameters. * @param context A Context object used to access application assets. * @param attrs An AttributeSet passed to our parent. */public WebView(Context context, AttributeSet attrs) {
    this(context, attrs, com.android.internal.R.attr.webViewStyle);}

/** * Construct a new WebView with layout parameters and a default style. * @param context A Context object used to access application assets. * @param attrs An AttributeSet passed to our parent. * @param defStyle The default style resource ID. */public WebView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);}


now you know!



Wednesday, October 28, 2015

Why my Android studio is so slowlly?

referrence Link http://stackoverflow.com/questions/30024910/android-studio-1-2-gradle-is-very-slow


The first step:
you can set your gradle is type: offline

The second step:
you should make a file: name 


 I have seen people use, but which I have not used yet is to create agradle.properties in the gradle folder like so:

The third step:
Just create a file named gradle.properties in the following directory:
/home/<username>/.gradle/ (Linux)
/Users/<username>/.gradle/ (Mac)
C:\Users\<username>\.gradle (Windows)


Add this line to the file:
org.gradle.daemon=true

=====================================

Other method:

What I did was to change the global gradle settings to offline work which can be done by going to Preferences => Gradle. This did make a difference.

you can see the iamge:

the before:


the later:

when you din't change your code. The gradle build is so fast.But when you change your code one line or more line. The gradle will build like before! do you know!


什么样子的女人值得你等待五年?



早上,突然间想起一个问题,曾经有人问我有没有女朋友了?我回答说,我愿意等她五年,现在想想我是不是真的愿意呢?

人的一生能有多少个五年的时间呢?而且是我一生中最宝贵的五年的时间。现在我觉得没有那一个女人值得我用一生中最好的五年的时间来等待她。因为,她不值得我这么做的。时间飞逝,我根本就没有那么多的时间浪费在她的身上,我现在觉得如果不在我的眼前的女人。如果不能立马得到的女人,就是花费再多。我也没有时间等待了。因为,我的一生有几个五年呢?在人生中最黄金的时间,没有女孩喜欢我,而我为什么要花费自己人生中最宝贵的五年的时间来等待一个未知的答案呢?这个答案是不确定的,就算是我等待了五年又能怎么样呢?她已经结婚生子了。而我呢?卧槽。我什么也不是呀。如果她离婚了,我还会喜欢她吗?物是人非了。我不是那么痴情的孩子呀。为什么我要捡别人剩下的女人呢?我难道没有自己的自尊心和羞耻心吗?难道我没有自己的思想吗?难道我不知道自己喜欢什么样子的女孩吗?现在我就是一个屌丝的生活,父母已经付出了很多的了,他们已经竭尽所能了,但是现在的我呢?所有没有钱,没有车,没有房子,请客吃麻辣烫。还他妈的把汤给喝了。我想要的是现在拥有的女人。但是没有人会跟我的?在年轻的时候自己的精力最旺盛的时候,在这样的国度里面。我们只能学习佛家箴言  禁欲。 没有人愿意这样子的。但是我有什么办法呢?生活似乎总是爱跟我们开玩笑的。可以结婚的年龄,我们根本结不起婚。因为有的人一辈子也结不起。我不知道。我是不是这种人。等到自己有点钱的时候,有结婚的能力的时候,但是我们已经老了。我们该怎么办呢?学习刘强东。娶同龄人的女儿。这是不错的选择。但是我们的内心并不是真的原因这样去做的。因为,我们根本就不想这样,我们也喜欢在自己想结婚的年龄就去结婚的,但是我的家庭的条件不允许!

爱美之心人皆有之,秀色可餐。也许合适的才是最好的吗?并不是的,你拥有的才是最好的!



没有任何的女孩子值得 我用五年的时间来等她!

因为 她 不值得,千秋,似乎是我们真的远了。我们已经回不到从前了。我们已经长大了。我们的生活就是不同的人生和生活,祝你 幸福。从先在开始我的生活只为了我自己的生活。再也不会为了别人。尤其是你奥。要知道我似乎已经浪费了十年的时间,换回来是什么呢?是你的爱答不理。难道要等到你会说爱我,那不太现实,再说了。到那时候 凭什么你说爱我就要答应你恩?因为我们已经不再是以前的我们了!


Tuesday, October 27, 2015

感悟自己的生活


突然间感觉自己似乎真的长大了吧,很多事情。真的不是自己想象的就是最好的,很多的时候不是自己的想象就可以得到的,就像是爬香山一样子。大家都有一个目的,但是每个人爬山的方式是不同的,每个人的表情也是不同的,有的人会选择做电缆上去。因为他们觉的时间是最宝贵的。有的是会选择爬山,爬山的每个人优势表情各异的,每个人的想法也是不同的,有的人开心,有的人是为了锻炼身体,有的人只是为了玩。有的人是为了登高望远,而而我只是为了出来透透气。

内心的深处。似乎是迷茫了自己的初心,内心的宁静才是真正的我吗?似乎我连自己想要什么都不知道吧。似乎现在的只是单纯的对钱感兴趣。但是我没有抱怨的资本,因为,有很多人一出生就最里面晗着金钥匙,这点是我不能攀比的,而我要做的就是自己 吃自己的饭,走自己的路,长自己的本事,学自己的知识,为自己的打天下。就是这样简单。很多时候,年轻的时候不知道珍惜,直到老了才会去后悔的事情,我要尽量的少做,这个世界想来都是公平的。

你现在的努力决定你的未来。是的,如果现在知识知道打lol那么十年之后的你,似乎可以看到你的样子或者是影子。很多时候是我们不敢想象的存在。人这一辈子活的的为什么这么累呢?我不知道,因为我似乎有点羡慕别人。是的,有的事嫉妒。但是似乎我偏离了我的本心。没有这个必要的。只要我自己做好自己就好了!

做自己喜欢的事情。但是,我的内心是怎么的?我的内心是怎么想象的呢?我也不知道的。我似乎只知道自己的想要的。但是这一切都是需要付出努力的!


有很多事情就是天生的,就像这样子:








网速卡到没有心情写博客了! 我也是操了

Monday, October 26, 2015

Error:Execution failed for task ':app:compileAnzhiDebugTestAidl'. > Executor Singleton not started

Error:Execution failed for task ':app:compileAnzhiDebugTestAidl'.

> Executor Singleton not started
  

Why?

because i use the local gradle, so lay to this question, because my program gradle version din't match!

Android 晋级之路 ------------- Github 殿堂

1  还不错的个人工具收藏: 很敬佩这哥们的收集精神呀, 如果你是一个细心地人,也会跟他一样的:
https://github.com/GeekHades/Android-Tips

Sunday, October 25, 2015

Android studio 快速开发的插件介绍

Android studio  Gradle   deveplor  必备的plugon :




1  快速生成组件的 插件

    compile 'com.jakewharton:butterknife:7.0.1'//inject 

2   picasso  image loader 
    compile 'com.squareup.picasso:picasso:2.5.2'

3   httpclient get data utils

    compile 'com.squareup.okhttp:okhttp:2.5.0'



new info will add on...

please to wait!  thank you very much!

Java ---- 引用篇


参考链接:
http://www.cnblogs.com/fsjohnhuang/p/4268411.html


Charles 比较牛逼呀



哈哈,头一回发现,Charles 好牛逼呀,看来WireShake 也是一样的呀,他直接可以监听到 路由器上的某一个端口的请求的数据,只要你的检测器和你的应用在统一个网段里就好了,感觉比较吊。

思考一下,为什么 可以呢?看来根源就在于你设置手机的
代理的问题,这个这个时候你手机(移动设备的IP)和电脑的IP 是一样 的,所以路由器在做数据分发的时候,会将数据发送到你的两端,这样你的手机所有的访问数据,都可以检测得到,感觉非常的屌呀。之前,我一直是这样处理的,我一直以为,只有我的电脑自己的发送的Wifi hotspot才可以嗅探到我的手机的信息,1 电脑发射wifi,  2 手机连接wifi   遮掩刚才可以获取数据,现在看来并不仅仅是这样的!

Tuesday, October 20, 2015

个人的感悟

我自己现在似乎真的是有点迷茫了?这个世界是个什么样子的世界?我似乎没有了自己的管观点和自己的感念。感觉自己就像是一叶扁舟在这个世界的海洋里面航行,但是找不到自己的彼岸,内心的迷茫着呢?世界这么大,自己还是那样的单纯,无法找到真正的自己喜欢的人。是的为什么,就是找不到自己喜欢的女人恩?整天在地铁上偷拍美女,是的这没有什么错的地方,但是就是因为美女长得很漂亮,本身审美是一种个人的享受的生活,这没有什么错的饿。到那会死,我一直很郁闷,现在的自己真的是有很多事情不是自己能够得到的,尽管自己内心真的很渴望一份爱情,但是似乎那样的不切实际,爱情离我真的是太远了,因为我的周围全部都是刷锅,没有女孩子呀,这也是原因之一,没有女孩子,我又该怎么找到自己的喜欢的人呢?这似乎就是巧妇难为无米之炊呀!是的,我觉自己的似乎已经厌倦了撸管的,但是这是现在唯一的解决自己生理需求的方式,(第一个发现撸管的男人真的是很牛逼呀!)是的,长这么大了,竟然从来没有碰过女人,没有真的做过一次爱,这个说出去真的是让人家笑话呀,尽管我不是一个活在别人眼里的人,但是我似乎已经活过了我生命力的三分之一的生命,但是,我却没有真正的碰过女人,这个事情,似乎也只有在中国才会出现吧。哈哈,再别的国家,很小的时候似乎就已经不是处女了,哈哈,在中国的屌丝的世界真的是很多呀,自己长得很屌丝,我有没有家庭的背景,现在想想是不是自己白活了这么久了,自己想做的事情竟然没有一件事情是做成的,自己喜欢的女人,自己的女神被别人操着,自己却似乎只能跟自己的女神聊会天就回觉得很开心了,我突然间想起一个问题,那就是当自己的女人被别人操过了?我的内心是什么样子的?我第一的想法,我要草回来,但是这样现实吗?跟我这么大的时候别人,不知道已经有多少女人了,火者说不知道草过多少女人了,然而我依然是一个纯情的小处男,真的为自己很不甘呀。内心每每想到这里的时候,就会觉的很是心酸的,就感觉自己这么多年的时间就是白活了!但是李珠我喜欢的女人都有自己的男人了?我不知道这是为什么呢?为什么我喜欢的女人就是不会让我射门呢?我真的很郁闷,可能是因为我就是一个屌丝吧。屌丝的世界就只能配一个丑女或者妓女吧。现在想起琪琪说的挺对的,我毕业的时候琪琪跟我说,长这么大了还没有跟女人做过爱呢?这样好吗?我不想就这样毕业了。但是,很多事情都不会想我们想象的那样子发展的。自己爱情观似乎只有自己知道吧,但是我真的不知道自己想怎么样了?我的世界我究竟想找什么样子的?说真的,我想找我的梦中情人,但是他已经有男朋友了,我是一个有处女情结的人的,也许就是屌丝的事情比较多吧。我想找一个白皙的女人,漂亮,魔鬼身材面容姣好,等等吧。但是真的符合这些要求的女人,哪一个没有自己的男人了?也许是自己的下手台湾了阿布。不知道自己的男人,理想与自己的现实总是那样的遥远。自己25守得贞操不想再要了。尽管我已经不知道自己撸管撸了多少次了。其实根本数不过来了,但是我还是从来没有碰过女人的,这点已不可否认。似乎在别人看来,似乎在自己看来,我更需要的是一个炮友,而不是女友,是的我的性欲是非常的强的,自己的确是想有很多的老婆,一个完美的炮友,一个可以带出去旅游的美女老婆,一个在家会照顾我的老婆,一个活好的女人在床上可以满足我的各种需求,一个可以孝敬老人的女人,对我的爸妈好,让他们安度晚年。一个会带孩子的女人。一个护士,可以给我按摩,在我累的时候让我舒服,一个可以谈心的女人,但是,我发现自己毕业之后,就连和女孩子说话的机会都没有了,别提什么找女朋友了,还好我有一帮很铁的哥们们哈哈。但是,哥们毕竟只能是哥们呢,不能满足女人嗲给我们的快乐的,这个世界就是这样的,我们总是不会满足自己现在拥有的一切的事物。一旦,我们满足的时候,我们就会觉的自己世界很无聊,就会去作死的时候,就是我们距离死亡最近的时候,这个世界就是这样的,我们想要的旺旺是得不到的,并不是 你想什么就会立马得到什么,这样的话,我们都会想自己的女朋友很漂亮,但是张的丑的女人怎么办呢?难道他们都要去整容,根本不可能,有的人长得就算是整容也拯救不聊了,这世界,就是美女和帅哥就是很受欢迎的,但是往往其貌不扬的人成就会更大。因为,我们经历的事情会更多的!

现在的自己还是很年轻的,自己喜欢射门,就去射吧。不要顾虑太多了,自己做自己喜欢的事情,遵循自己的内心!看看自己的内心想要什么,想要自己的内心的完美!有很多事情,自己想明白了,自己就老了。不要老是等到自己不行了的时候再去努力,我想问你,当你有心无力的时候,你能做什么呢?当你老了,你还能做什么恩?趁着自己现在还年轻的时候,做自己的喜欢的事情,秀出自己的世界。

人这一辈子,快乐是一辈子,痛苦也是一辈子,为什么老是去给自己自寻烦恼的呢?我真的是很不解的问?

活出自己,秀出自己的生活,我就是自己的皇帝。做自己的皇帝,让别人说去吧!


Monday, October 19, 2015

intillJ 导入的项目的时候 目录显示在最顶部?



今天在导入 hithub 项目的时候, 因为Intillj 比较牛逼, 似乎可以做所有的事情。因此,你在导入的时候需要选择配置 gradle. 不选择的话,你导入的项目有 识别的框架, 就不出现下面的问题, 在你的右侧的目录里面没有任何的文件:



how to reslove this problem!

如何解决呢?

很简单,你需要关闭当前的项目,在导入一遍,但是导入项目的时候你需要选在 gradle, 或者是你当前使用的 框架。之后就Ok了!




Android studio gradle is so slow?

Why?



I think, you must know every program you can see ./gradle directory. Yes it is you download the gradle info just for your current program!  So when you install a new program you will find it is so slowly.  

I think we can just set gradle setting for all program, you just one setting and run everywhere.

like this:

detail:  
you may meet  the gradle home is incrract. 

you can see the url:http://stackoverflow.com/questions/21646252/how-to-set-gradle-home-while-importing-existing-project-in-android-studio


========================================

if  you choise the use local gradle distribution, There is some question. because the gradle is usualy update tool. So you use local gradle, Some days later, you will find the program can build. Because the gradle version hase new plugins or new version.

you can follow this way can reslove the  gradlw slowlly:
http://stackoverflow.com/questions/16775197/building-and-running-app-via-gradle-and-android-studio-is-slower-than-via-eclips







Mac hot to set Androdi_HOME


you can follow me:

1 .
export ANDROID_HOME=/Users/Hades/Library/Android/sdk

2.
Once you have this set, you need to add this to the PATH environment variable



export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools


reference:

http://stackoverflow.com/questions/19986214/setting-android-home-enviromental-variable-on-mac-os-x

========================================

The right answer:
1
you can up method. but you will find that  when you restart you mac pc, your adb can't use in terminal. So in a ward, the first way just for one time setting. But how to set Path forever

you can look this url:https://seo-michael.co.uk/how-to-setup-adb-on-os-x/

it is useful for me.

i do for this way, but when i kill the termial. when i input 
echo $PATH,  there is nothing to print!
I don't know why?  So i just restart the computer. you will find your setting is success!

just so so!

android studio gradle: command not found ?

reference
http://stackoverflow.com/questions/24398041/build-android-studio-app-via-command-line


you can flower this way:
Try this (OS X only):

brew install homebrew/versions/gradle110
gradle build

Style and theme in android

i think the the developer document of android is very good!So it is nessarry you speed some time to read it! You can learn more you don't know exactly.

https://developer.android.com/guide/topics/ui/themes.html


Remember, a style that you want to use as an Activity or application theme is defined in XML exactly the same as a style for a View.   A style such as the one defined above can be applied as a style for a single View or as a theme for an entire Activity or application. 

First: 
I think style the most importment is that, when you write the same component ,  you can reuse you write the style. you don't need to write the same code to the component .

一般追求的不同, you can get you want in android. So you must to know what you want to get!

Friday, October 16, 2015

How to Speed up Gradle build time


If you use the new Gradle build system with Android (or Android Studio) you might have realized, that even the simplest Gradle call (e.g. gradle project or grade tasks) is pretty slow. On my computer it took around eight seconds for that kind of Gradle calls. You can decrease this startup time of Gradle (on my computer down to two seconds), if you tell Gradle to use a daemon to build. Just create a file named gradle.properties in the following directory:

/home/<username>/.gradle/ (Linux)
/Users/<username>/.gradle/ (Mac)
C:\Users\<username>\.gradle (Windows)
Add this line to the file  gradle.properties:

org.gradle.daemon=true

From now on Gradle will use a daemon to build, whether you are using Gradle from command line or building in Android Studio. You could also place the gradle.properties file to the root directory of your project and commit it to your SCM system. But you would have to do this, for every project (if you want to use the daemon in every project).

this way is very good!
i think  this way like you set location url, when the gradle to connect the website "org.gralde.deamon"  you speed up very good! you can save your time!

参考链接https://www.timroes.de/2013/09/12/speed-up-gradle/

Thursday, October 15, 2015

Unable to execute dex: method ID not in [0, 0xffff]: 65536


it in build.gradle:
android {
   defaultConfig {
      ...
      multiDexEnabled = true
   }
}


If your application supports Android prior to 5.0 (that is, if your minSdkVersion is 20 or below) you also have to dynamically patch the application ClassLoader, so it will be able to load classes from secondary dexes. Fortunately, there's a library that does that for you. Add it to your app's dependencies:
dependencies {
  ...
  compile 'com.android.support:multidex:1.0.0'
} 


Either add this to your Application.java
@Override
  protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
  }

Wednesday, October 14, 2015

java.lang.NoSuchMethodException: startScan [boolean]




java.lang.NoSuchMethodException: startScan [boolean]

locSDK_3.1.jar 用的是这个版本。今天刚从官网下的demo。从demo里面拿的包。刚才改用华为的真机测的时候没有报错。这些错事用虚拟机测的时候出的,真不知道为什么

我测试的手机:

华为  三星 没有问题。

但是小米 是不可以的!


解决方案:
因为百度地图更新是比较快的,但是我们的项目一直没有动。这也许使我们存在的问题。一般我们实现之后,就懒的改动了。这是很有问题的,作为一个高级的工程师应该与时俱进!

1  将百度地图定位的包 
  更新为最新的包  
  loc_sdk.6.2.SDK  自己去下载吧!
  还有对应的so 文件!

2  注意这个类中LocationClient 没有requestPOI()  方法,我郁闷了好半天,其实这个方法已经被封装了!直接删掉就可以了!
   替换更新的  方法!










Monday, October 12, 2015

Error in Manifest.xml when adding PACKAGE_USAGE_STATS [Android Lollipop]

You can simply make this on the manifest, ignoring just this permission error:
<uses-permission
    android:name="android.permission.PACKAGE_USAGE_STATS"
    tools:ignore="ProtectedPermissions"/>

参考链接:

Android studio 个人最喜欢的快捷键





个人最喜欢的Android studio   key


  Control + Command + W    Close current project

  Control + Command + O   Close other you open tab windows

  Control + Command + L   Close all  you open tab windows

  Command + B

  Commnad + 7

  Command + Alt + F7

  Control + H

Saturday, October 10, 2015

ListView 如何实现不同的布局的加载

今天遇到了很恶心的问题。ListView 加载不同的布局, 每一个中布局的样式是不一样的。这是很蛋疼的问题。我为此疼了很长的时间。




今天,之前我做了一个Listview 需要加载不同的布局,我很是自以为是的认为加载一个不就就够了,然后做不同的判断。尽管我感觉自己的方法提炼的不错了,但是还是不行啊!
还是很恶心的代码,因为,当你的需求改变的时候,你需要添加一种需求的时候,这是很蛋疼的问题呀。因为,这个时候,你之前写的代码都需要改变,这就违背了 开闭原则。所以,不建议这么写的。

所以,我就用了一种很不错的方法。 
根据不同的实体的状态,加载不同的布局,这样的话就会很好的解决修改很复杂的问题,尤其是当别人来修改你的代码的时候,他们就不会特别的恶心,因为你做了很多的事情,你不仅是为了完成今天的任务,同时我也考虑到了以后的时候,为自己节约了更多的时间做其他的事情。

不同的状态对应不同的布局,这是很不错的方案!
就是多写几套布局罢了!

在我们的Adapter 中:我们必须要重写父类的两个方法:
@Overridepublic int getViewTypeCount() {
    return DEFALT_MAX_TYPE_NUMBER;}

@Overridepublic int getItemViewType(int position) {
    return getItem(position).getStatus();}


getViewTypeCount() 获取当前的ListView所有Items 一共的状态,我的建议是 这个值 一定要大于 你的状态的种类!例如: 你有需要写五种布局的时候,只需要将 这个返回值大于5 就好!

getItemViewType(int position)
这个方法,会根据不同的状态吗,返回不同的View, View 有唯一的TAG  viewHodler. 这样子 就确定了 一个状态对应一种布局 一个ViewHolder

下面是我们的getView()  会非常的简介:
@Overridepublic View getView(int position, View view, ViewGroup root) {

    final SaleHouseEntityV27 entity = getItem(position);
    status = getItemViewType(position);
    switch (status) {
        case NOT_GRAB_A_SINGLE:
            view = initNotGrabASingleView(view, root, entity);            break;        case NOT_REAL_PROSPECTING:
            view = initNotRealProSpetingView(view, root, entity);            break;        case HAS_REAL_PROSPECTING:
            view = initHasRealProspectingView(view, root, entity);            break;        case HAS_REPORT:
            view = initHasReportView(view, root, entity);            break;        case HOUSE_DEALING:
            view = initHouseDealingView(view, root, entity);            break;        case HOUSE_DEAL_SUCCESS:
            view = initHouseDealSuccessView(view, root, entity);            break;        case HOUSE_TEMP_NOT_SALE:
            view = initHouseTempNotSaleView(view, root, entity);            break;    }

    return view;}



参考我的Github:
https://github.com/GeekHades/Hades

[ERROR] E/MicroMsg.SDK.MMessageAct: send fail, target ActivityNotFound Android


我的代码:

@Kroll.method
  public void regToWx()
  {
    Log.d(current_module, "=======start to register to wechat==========");
    api = WXAPIFactory.createWXAPI(getActivity(),null);
    Log.d(current_module, "=======create api after====="+api);
    api.registerApp(APP_ID);
    Log.d(current_module, "====注册微信成功======");
  }


  @Kroll.method
  public void sendMessageToWx()
  {
    Log.d(current_module, "====下面发送消息给微信======");
    WXTextObject text_obj = new WXTextObject();
    text_obj.text="we are young!!!";
    Log.d(current_module, "====构造Media Message======");
    WXMediaMessage msg_obj = new WXMediaMessage();
    msg_obj.mediaObject = text_obj;
    msg_obj.description = "this is desciption";
    Log.d(current_module, "====构造 Request======");
    SendMessageToWX.Req req = new SendMessageToWX.Req();
    req.transaction = String.valueOf(System.currentTimeMillis());
    req.message = msg_obj;
    req.scene = SendMessageToWX.Req.WXSceneTimeline;
    Log.d(current_module, "====发送请求给微信了======");
    boolean result = api.sendReq(req);
    Log.d(current_module, "====result======"+result);
    Activity activity = TiApplication.getInstance().getCurrentActivity();
    Log.d(current_module, activity.toString());

  }


参考的解决方案:

I solved this trouble.
@Kroll.onAppCreate
  public static void onAppCreate(TiApplication app)
  {
    Log.d(LCAT, "inside onAppCreate");
    api = WXAPIFactory.createWXAPI(app,APP_ID,true);
    api.registerApp(APP_ID);
    Log.d(LCAT, "================= register App success=====================");

  }

参考文档:
IWXAPI 有状态信息appId,每次调用时都实例化一个新对象



========== METHOD SUMMARY ===========
Method Summary
static IWXAPI
createWXAPI(Context context, java.lang.String appId) 
           
static IWXAPI
createWXAPI(Context context, java.lang.String appId, boolean checkSignature) 
           


其实最主要的就是因为, 签名不对的问题。所以,一定要确保签名没有问题!

参考链接http://stackoverflow.com/questions/29075496/how-to-set-the-activity-in-titanium-when-i-send-message-to-wechat





微信分享的Key 大坑

今天花了半天的时间 再找微信分享的问题。为什么微信分享不了呢?




我们的代码看不出问题,找了半天是因为申请的时候的问题,在开发者平台账户申请的Key 本身就有问题:

1  注意在平台创建项目的时候的 
需要输入  包名  和 MD5 密钥  
   我们的公司的哥们竟然写反了,我也是醉了!导致了我们花了好长的时间找问题。所以, 开发者需要权限。必要的权限是我们开发效率的前提。


MD5  的码  (血的教训)
4A:C2:B2:3F:A5:42:30:95:2A:83:C3:09:F9:F4:3A:F5

1 必须 要将大写字母 和 替换成小写字母(哥们验证之后说,这个不替换也没关系。因为,后台好像没有区分 大小写!)
2 必须将:删除

如果 密钥有问题,那么就是一件很恶心的事情。你不论做什么都不行的。不能分享,登录就不用说了!

这个地方只能用 MD5 的密码, 不要使用 SHN1 或者别的密钥!


外传:

1  当你修改完只要, 可能需要等一会。 因为微信开发者平台有缓存的,所以不能立刻修改的Key 直接替换掉!

2   至于清缓存的问题,  微信需要清除缓存,才能分享?
 我没有找到原因,我并不清楚。我修改完Key 过了半个小时就好了!
可能是她得原因:
WXAPIFactory.createWXAPI(context, Constants.APP_ID,true);

之前的代码是:
WXAPIFactory.createWXAPI(context, Constants.APP_ID);

Friday, October 9, 2015

Android 编码规范

   规范问题, 没有规矩不成方圆 。 如果编码没有规范,每个人都按照自己的性格来写代码话人多的话,你就会感觉很恶心。别人写的代码 你就不想去看. 所以规范的问题是很有必要的!

1   包命名规范

采用反域名命名规则,包名全部小写,连续的单词只是简单地连接起来,不使用下划线,一级包名为com,二级包名为xxx(可以是公司域名或者个人命名),三级包名根据应用进行命名,四级包名为模块名或层级名。如:

com.isa.crm.activity

com.isa.crm.adapter

2   JAVA类命名规范

采用大驼峰式命名法,尽量避免缩写,除非该缩写是众所周知的,比如HTML,URL,如果类名称包含单词缩写,则单词缩写的每个字母均应大写。如:
Product | ProductManager |
ProductListActivity | ProductListAdapter | JsonHTTPSRequest

3  接口命名规范

命名规则与类一样采用大驼峰命名法,多以able或ible结尾。例如:
interface Runable | interface Accessible

4 变量命名规范

采用小驼峰命名法。

成员变量命名
使用Google的m命名法;
例如:private String mUserName ()

临时变量命名
使用标准的Java命名方法,不推荐使用Google的m命名法。例如:
private String userName;

常量命名
常量使用全大写字母加下划线的方式命名。例如:

public static final String TAG = "tag";


5 控件实例命名

类中控件名称必须与xml布局id保持一致(可以去掉{module_name})。例如:

在布局文件中 Button 的id为: android:id="@+id/btn_pay"

private Button btn_pay;


6  方法命名规范

动词或动名词,采用小驼峰命名法。例如:

run(); | onCreate(); | syncProducts();


7 布局文件(Layout)命名规范

全部小写,采用下划线命名法。其中{module_name}为业务模块或是功能模块等模块化的名称或简称

activity layout: {module_name}_activity_{名称} 例如:

crm_activity_main.xml | crm_activity_shopping.xml


fragment layout:{module_name}_fragment_{名称} 例如:

crm_fragment_main.xml | crm_fragment_shopping.xml


Dialog layout: {module_name}_dialog_{名称} 例如:

crm_dialog_loading.xml


ListView列表项布局命名:{module_name}_list_item_{名称} 例如:

crm_listitem_customer.xml


include 包含项布局命名:include_{名称} 例如:

include_head.xml


adapter的子布局: {module_name}_item_{名称} 例如:

qz_item_order.xml


widget layout: {module_name}_widget_{名称} 例如:

crm_widget_shopping_detail.xml



8  资源id命名规范

命名模式为:{view缩写}_{module_name}_{view的逻辑名称},如:

顾客管理CRM模块布局 LinearLayout 的布局id –> ll_crm_content

模块简称为qz的 ImageView 的布局id –> iv_qz_photo

常见控件View与其缩写对照参考表如下:



9  图片资源文件命名规范

图标命名:{module_name}_ic_{名称} 例如:

crm_ic_app.png

背景图片命名: {module_name}_bg_{名称} 例如:

crm_bg_navbar_highlight_normal.9.png

按钮Button命名: {module_name}_btn_{名称} 例如:

crm_btn_login_normal.9.png

按钮checkbox图片命名:{module_name}_checkbox_{名称} 例如:

crm_checkbox_cart_true.png

其他图片命名:{module_name}_icon_{名称} 例如:

qz_icon_blue_circle.png



10  代码风格


大括号问题

风格一
if (hasMoney())
{

}
else
{


}




风格二

if (hasMoney()) {

} else {


}



11 空格问题

if else | while | 运算符两端 等后面需用空格隔开。例如:


规范的编写方式:

if (hasMoney()) {

} else {

}

for (int i = 0; i &lt; 10; i++) {

}


不规范的编写方式:

if(hasMoney()){

}else{

}

for(int i=0; i&lt;10;i++){

}


12 方法参数

当方法参数数量过多时,需进行换行处理.

建议使用:
1 传递对象的方法。
2 提取成员变量。(根据需要)
3 删除冗余的参数。



13  注释 (最好的注释 就是没有注释)

这个没有必要,我们一般没有时间写注释,除非非常重要的。一般我们只要有一个好的名字就可以看出他的作用!

13.1 实例变量、类常量进行注释说明 例如:

/ / 用户姓名(这个就是没有必要的,通过名字我们就知道他的作用)
private String userName


13.2 类、接口进行注释说明 
接口比较抽象和通用,所以对接口和接口中的方法写注释 是很有必要的!
例如:

/**
* Activity基类
*
*/
public class BaseActivity extends Activity
{
}


13.3 方法进行注释说明 例如:

/**
* 请求
*
* @param path 路径
* @param generalParams 基本参数
* @param businessParams 业务参数
* @return 请求结果
* @throws ApiException 请求错误则返回该异常
*/
public Map<String, Object> request (String path,
              Map<String, Object> generalParams,
              Map<String, Object> businessParams) throws ApiException {
   return null;
}



注解:

驼峰式命名法(CamelCase)

大驼峰式命名法(UpperCamelCase):
每个单词的第一个字母都大写 如:XmlHttpRequest
小驼峰式命名法(lowerCamelCase):
除了第一个单词,每个单词的第一个字母都大写 如:xmlHttpRequest
说明


参考网址:

1 非常好的参考


Thursday, October 8, 2015

Android merge

有的时候使用 layout  include 的时候,当你引入 的布局文件是Merge为根节点的时候,有的 时候当布局很复杂的时候,不见这样,因为 可能会出现, 布局加载的时候, 显示的问题,不对齐,很恶心的!

解决方案:

include 的布局文件 不要一 merge 开头,随便一个布局文件 都可以!这样不会该改变布局的样式!

Wednesday, October 7, 2015

Mac 如何隐藏和不隐藏 文件夹?

3)通过修改文件的隐藏属性
在终端中输入chflags hidden 然后将文件拖到这里,按return执行即可隐藏文件。
chflags是一个更改文件隐藏属性的命令,他的意思就是change flags,也就是修改文件的标志,hidden就是隐藏,所以chflags hidden就是隐藏文件。如果要取消隐藏文件,只需要输入“chflags nohidden 文件”即可。