折腾了好久,这个诡异的stopped unexpectedlly错误,我以为是权限问题,仔细查看,还真把权限申明写错了,应如下:

    

      修改过来,还是崩溃,折腾了好久,到处找,终于找到一条实用的,先来看看我的出错代码:

    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    startManagingCursor(cur);
    ListAdapter adapter = new SimpleCursorAdapter(this,
        android.R.layout.simple_list_item_2, //每一行两个数据项
        cur,
        new String[]{PhoneLookup.DISPLAY_NAME, PhoneLookup.NUMBER},
        new int[]{android.R.id.text1, android.R.id.text2}
    );

      在网上看见有人这么说:
      ContactsContract.Contacts.CONTENT_URI中的URL与PhoneLookup.DISPLAY_NAME不符合,也就是说,PhoneLookup所对应的URL不是ContactsContract.Contacts.CONTENT_URI。所以报错。使用 ContactsContract.CommonDataKinds.Phone.CONTENT_URI,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER。
      照着修改,ok,成功的跑起来了,修正后的代码:

    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
    startManagingCursor(cur);
    ListAdapter adapter = new SimpleCursorAdapter(this,
        android.R.layout.simple_list_item_2, //每一行两个数据项
        cur,
        new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER},
        new int[]{android.R.id.text1, android.R.id.text2}
    );

        买《android应用开发揭秘》这本书有一段时间了,这段时间每晚回来都有看一会,那天他们玩德州,我一点欲望都没有,就在一旁看这书,很好的一本书,但一直没有正式编码写。今天回来的还算早,就打算配置环境,正式入门学习。
        1、从sun官方下载java的JDK安装包,页面地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-download-400750.html,安装完成后,在环境变量PATH中添加:C:\Program Files\Java\jdk1.6.0_24\bin,在CLASSPATH中添加:C:\Program Files\Java\jdk1.6.0_24\demo
       2、从android官网下载android的SDK,页面地址:http://developer.android.com/sdk/index.html ,下载比较快,安装可是坑爹的慢,最好还有几个版本不想装,直接跳过,在环境变量PATH中添加:D:\opt\Android\android-sdk\tools;D:\opt\Android\android-sdk\platform-tools,可能你会把android安装到Program Files目录,那么恭喜你,你肯定运行不了:[2011-07-12 23:28:55 – Emulator] invalid command-line parameter: Files\android-sdk-windows\tools/emulator-arm.exe。如果你是一个伟大的程序员,google一下就知道是Project Files中有个空格,导致问题出现,所以,解决办法:把Android整个目录拷贝到一个没有空格的目录结构下,就如我放在D盘。
      3、打开eclipse,依次Help->Install New Software,在打开的窗口Work with中输入:android – https://dl-ssl.google.com/android/eclipse,这就是eclipse的android插件。
      4、打开eclipse,依次Window->Preferences->Android,在框中选择android的SDK安装路径。
      5、添加一个android模拟器,依次打开:Window->Android SDK And AVD Manager,new一个模型。
       到这里,环境的配置就完成了,接下来就该认识android框架的目录结构了,期待下一次。闪!

      最近这脾气,这毛病,一天比一天严重,程序员都有这样的吗?偏执编码,疯狂思考,一味实现,痴情到都不想说人话,讨厌一切不符合自己的事物。
      之前跟飞龙、书记坐一起的时候还好,每天都能瞎扯一些凡事,虽然大部分都是聊一些乱七八糟的八卦,但至少还过着一个人的生活,即便….现在好了,跟阿星(一个编码牛人)坐一起,一天啥事都不扯,全是代码,想法,呜呜呜呜呜….以前回家我都躺沙发看电视,玩手机,现在客厅有人,我只能回房间,玩电脑,看书。每天早上起床都不想说话,看看新闻,听听音乐,然后默然的走到公司,不想开口,莫名其妙的不想说话。回家只要看见电脑我就恶心,烦躁。今天突然发现(或者说承认)我思想有毛病,心理有问题。
      去年刚进公司的时候也有过这样,那时候只是想,我是来工作的,闲杂人等靠边,结果落得….。现在又有这问题,难道这是间歇性的吗?这段时间又到了去年来公司的时间了。倒了。
      这段时间做了一个晒单小项目,在框架选型的时候打算用cd写的eas框架,结果一看好复杂的结构,这不算什么,主要是还有中文日志,这点我就特别挑剔一下了,而且他们大部分是面向函数,不是说函数不好,是因为函数扩展性太低,维护性不高,逻辑性不强,说多了,有点顽固分子。之前我在业开的时候,做了竞拍和竞拍接口两个项目都是我用面向对象实现的框架,结果这次发现老大做晒单的php端用了我之前写的手机接口框架结构,我感觉不是很适合吧,到感觉竞拍的框架还算适合,因为接口的有统一输出和命令id配置。可惜要是我还在业开,可以再写一个,感觉上次写的微博demo版框架蛮好用。扯远了,话说面向对象的eas,也就是那天星哥给了一天时间写了一个超minieas框框,除了一个main函数,start、stop插件函数,其它全是对象,真的很好用,今天做了一下性能测试,发现mini版的比起他们的完整版也没高效多少(mini版10000次9秒多),最后优化调整,才发现,我的demo中做了逻辑判断,而他们demo中直接返回,去掉逻辑变为了7秒,再优化,把所有的都压缩了,效果不是很明显,去掉两个logging,2秒,2秒就搞定10000次了,我们组都很诧异,真想重写logging,改为c版的,如果给点时间,我很愿意挑战。但最后要开始整oauth模式到之前写的sso中。
       重点,虽然我刚瞎扯了这个minieas怎么样,但是,比起完整版,这什么都不是,他们的功能模块很强大(比如监控ice线程的watchdog),而且有很多错误很人性(比如参数不够),恩,写的很多,有很多需要学习的地方,还没怎么看完,每次看一点点就看不下去了,模块实在太多。
      买了8.12号的飞机票,花了我2大千啊,好想见一下父母和姐姐,顺便把眼睛做个手术,现在着眼睛我快是受不了了,戴眼镜太难受,每天上班眼镜把这两耳朵挂的…..
      好吧,关电脑,上床看书。

      【申明】本人js小菜,高手绕道,本文只为纪念那白折腾的几个小时时间。
      很早之前就听说html5了,但是一直没有去花心思学习,昨天无意看见floyd在博客中写的塔防游戏,感觉很cool,所以打算从头到尾的吧html5学习一遍,结果刚弄了个video标签,就遇到了canvas标签,想弄个小动画(一闪一闪的星星而已,不要歧视),但是,到早上4点了还是没什么成果,无语,今天又花了点时间,难以想像,对canvas还不够熟悉,改天多花点时间再研究一下。累着了,纪念一下代码。
      真感觉,做php、python都没有什么前途,要么混到写c的地步,要么混到写javascript的境界,相比c说javascript简单很多,以前一直讨厌写js代码,主要是兼容性问题,昨天一写发现真的很有意思的语言,以后多花点时间写,对js的“情绪”也受的有之前sina微博的rss攻击影响。明天组内来了一个校友师弟,看简历很不错,争取能留下来,现在人少,比较累人。

    var setAttributes = function(obj, attrs){
        for(var i in attrs){
            obj.setAttribute(i, attrs[i]);
        }
    };
    //随机颜色,为了是颜色亮点,各增加了100
    var randomColor = function(){
        var r,g,b;
        r = parseInt(Math.random() * 255) + 100;
        g = parseInt(Math.random() * 255) + 100;
        b = parseInt(Math.random() * 255) + 100;
        return ('rgb('+ r +','+ g + ','+ b +')');
    };
    var createMedia = function(src, type, note){
        var t = document.createTextNode(note || 'Don\'t support html5!');
        var v = document.createElement(type);
        setAttributes(v, {'controls':'controls', 'autoplay':'autoplay', 'src':src});
        v.appendChild(t);
        document.body.appendChild(v);
    };
    var show = function(canvas, width, height){//
        this.conf = {'w':width, 'h':height};
        setAttributes(canvas, {'width':width+'px', 'height':height+'px'});
        this.ctx = canvas.getContext('2d');
        //this.ctx.fillStyle = '#FFFF00';
        //this.ctx.fillRect(0, 0, width, height);
        this.stars = [];
    };
    show.prototype = {
        'star' : function(x, y, radius, edges, color){
            var self = this;
            var newstar = function(x, y, radius, edges, color){
                this.conf = {'x':x, 'y':y, 'r':radius, 'n':edges, 'c':color};
                this.angle = Math.random() * 3.14;//随机角度
                this.angleV = 0.2; //随机角速度
            };
            newstar.prototype.draw = function(){
                var ctx = self.ctx
                var r = this.conf.r;
                var n = this.conf.n;
                ctx.fillStyle = this.conf.c;
                ctx.shadowColor= this.conf.c;
                ctx.save();
                ctx.beginPath();
                ctx.translate(this.conf.x, this.conf.y);
                this.angle += this.angleV;
                //ctx.rotate(this.angle);//旋转角度
                ctx.moveTo(r, 0);
                //画星星形状
                for (var i=0;i';
                if(o.conf.r<0){ //如果半径小于0删除
                    this.stars.splice(i, 1);
                    i--;
                    n--;
                }
                //alert('hah');
                o.conf.r -= 1;
                o.draw();
            }
        },
        'update' : function(inteval){
            var that = this;
            setInterval(function(){that._update();}, inteval);
        }
    };
    var createRect = function(width, height, bgcolor){
        var canvas = document.createElement('canvas');
        setAttributes(canvas, {'width':width+'px', 'height':height+'px', 'style':'position:absolute; top:0px; left:0px;'});
        ctx = canvas.getContext('2d');
        ctx.fillStyle = bgcolor;
        ctx.fillRect(0, 0, width, height);
        return canvas;
    }
    ~function(){
        var n = Math.floor(Math.random()*10)%2;
        //createMedia('track.ogg', ['video', 'audio'][n], null);
        var main = document.getElementById('main');
        var s = new show(main, 500, 500).add(2).update(1000);
        //ctx.clearRect(0, 0, 80, 100);
        document.body.appendChild(main);
    }();

      还有一点,画星星的算法我也没搞懂,哪天我用专业数学解一下。看个电影,睡觉。