- 博客(187)
- 资源 (7)
- 收藏
- 关注
原创 JsonOM解析
好久没有写博客了,一直很懒。客户端和服务器数据交换时,现在最流行的是Json格式,因此我们常常需要去解析Json字符串成对象。手动解析工作量太大了,影响工作进度,也是一种体力活。我们可以用Gson工具包来解析,它是一种Json ORM,可以帮助我们把Json字符串解析成对象。可是gson-2.3.jar包230k大小,为了一个json解析功能导入如此大的jar包,怎么给自己的应用加分?因此
2016-01-12 11:27:46
769
原创 XML格式统一解析
开发过程中,有时需要解析xml格式数据,但本人比较懒,不喜欢第次都写代码去解析不同的xml数据。所以写一个统一的解析方法去解析所有的xml数据。如解析下面两段xml格式数据用统一的代码去处理: fun text reason text 写一个统一的数据类型存放内容import java.util
2015-01-08 15:43:05
1626
原创 error C2061 && error C4430
error C2061: 语法错误: 标识符“_money”error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 intwarning C4183: “CC_SYNTHESIZE”: 缺少返回类型;假定为返回“int”的成员函数CC_SYNTHESIZE(int, _money, Money);使用CC_SYNTHESIZE时出现
2014-10-28 00:46:39
1153
原创 error C2338
头文件class Bullet;class BulletLayer : public Layer { Vector _bullets; ......};
2014-10-23 15:10:57
9123
原创 翻牌效果
auto pokerFront = Sprite::create("images/poker_dj.jpg"); pokerFront->setPosition(ccp(visibaleSize.width*0.3, visibaleSize.height/2)); pokerFront->setVisible(false); addChild(pokerFront, 1, 1); au
2014-10-18 15:01:20
1800
原创 android ping 命令使用问题
/** * ping主机,当url不通时,耗时大约1秒;能通时,耗时大约在50至300毫秒 * @param url * @return */ private static boolean ping(String url) { long pingStartTime = System.currentTimeMillis(); if (TextUtils.isEmpty(ur
2014-08-13 11:10:15
6426
原创 虚函数——virtual
virtual关键字用来#include using namespace std;#define LOG(x) cout << x << endl;class Base { int i;public: Base(int j):i(j) { LOG("Base"); } ~Base(void) { LOG("~Base"); } int getI()
2014-05-26 00:10:41
973
原创 指向指针(函数)的指针
#include using namespace std;#define LOGE(e) cout << #e << "=" << e << endl;void pointer(int* const p) { (*p)++; //*p++; //error cout << "pointer:" << *p << endl;}void reference(int& r) {
2014-05-25 23:25:07
830
原创 C++模板
模板类似于Java中的it#include using namespace std;#define LOGE(e) cout << #e << "=" << e << endl;//类模板template class Stack{ T data[N]; size_t cur_pos;public: Stack() { cur_pos = 0; } void p
2014-05-25 23:17:28
782
原创 C/C++读写文件
#include #include using namespace std;void c_read_file();void c_write_file();void cpp_read_and_write_file();void main(){ c_read_file(); c_write_file(); cpp_read_and_write_file(); getcha
2014-05-23 23:30:04
1004
转载 C语言中的函数指针与指针函数
函数是任何一门语言中必不可少的部分,正是由这些函数组成了程序。首先谈一下C语言中的函数指针与指针函数,再了解一下函数参数传递的相关原理。1.函数指针与指针函数(1) 函数指针 即指向这个函数的指针,定义为 数据类型 (*fun)(参数列表) ,()的优先级比*高,所以*fun加括号。如 void (*fun)(int*,int*);(2)指针函数 即返回值是指针的函数,定义为 数据类型
2014-05-22 23:38:03
1035
原创 Android通过NDK获取Keystore签名值
防止别人反编译自已的游戏再修改然后发布,我们可以用在so文件中用Keystore签名值来加密一些参数。这里只提供NDK获取Keystore签名值代码package com.boyaa.ndk;import android.content.Context;public class RegionGames { static { try { System.loadLi
2014-03-20 19:02:43
11409
原创 C++的常量const基本用法
#include using namespace std;class Const { const int i; int j;public: Const(int ci); void test(); const int* constTest(); int* constTest2() const;};Const::Const(int ci):i(ci) { j = 18;}
2014-02-21 22:53:29
1000
原创 图片压缩工具——pngquant
做移动项目开发时,应用中常常会包含图片,而图片一般都比较大,会加大上线包的大小。如果能把图片大小压缩,而不影响图片质量,这样包相对较小,就可以全用pngquant了。官网下载:pngquant
2013-06-28 14:58:06
3425
原创 Android陷阱
陷阱1:当创建一张图片时,时常会写出这样的代码 public Bitmap getBitmap(int resId, int dstWidth, int dstHeight) { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId); if (bitmap != null) { if (dstWid
2012-08-02 17:14:00
3621
原创 Android中开启一个空线程会占用多少内存
Android开发中,开启一个线程会占用多少内存空间?这个问题我一直没有测试过,以前在网上看见别人说需要1M内存(可能是该网友包含了很多数据),今天对这个问题做了一个测试。为了不影响测试,我使用空线程(线程不做任何事情,也不包含任何数据)。先贴上测试代码thread_occupy_memory.xml<LinearLayout xmlns:android="http://sc
2012-04-11 15:27:35
13629
原创 android命令行打包、签名+自动打包器
本文主要讲解使用命令行打包android工程成apk文件,我的android工程结构如图1.创建key: 使用keytool.exe(位于%JAVA_HOME%\bin\keytool.exe)创建xxx.keystore,在命令行输入:keytool -genkey -alias debug.keystore -keyalg RSA -validity 20000 -ke
2011-12-31 17:46:28
26183
3
原创 使用NDK与环境搭建
一、NDK介绍使用NDK,并不会给我们程序提高执行性能,反而会使程序复杂化。因此,尽量避免使用NDK,除非你真的需要使用本地库(通常是C/C++库),不要因为擅长使用C/C++编程而使用NDK。Android提供了两种使用本地代码的方式1.通过JNI调用本地代码2.通过NativeActivity类调用本地代码(从2.3版本开始支持)NDK 提供了一系列的工具,帮助开发者快速开
2011-12-21 12:58:04
7106
原创 动态注册JNI
在在纯java中使用JNI文章中可以看到,java的native方法与C/C++代码函数是通过Java___这种方式对应的,即它是静态注册的。当需要使用现有的C/C++代码函数时,需要以这种形式定义包装函数,在包装函数中调用现有C/C++代码函数;而且这样的函数名也非常长,不适合管理。使用动态注册,可以不受上述命名的限制。运行下面示例需要安装NDK及搭建环境,请看另一篇文章使用NDK与环境搭建
2011-12-20 18:08:31
13358
原创 音频压缩工具——Speex的使用
在Android开发中,需要录音并发送到对方设备上。这时问题来了,手机常会是GPRS、3G等方式上网,所以节省流量是非常关键的,使用Speex来压缩音频文件,可以将音频压文件小数倍。1.去Speex官网下载最新Speex源码。2.创建一个新的应用(我创建的应用名为Audio),并创建一个jni目录($project/jni)。3.把speex源码目录下的libspeex和include
2011-12-20 16:17:23
35287
2
原创 在纯java中使用JNI
Java已经用了N年了,也知道它底层调用的是C/C++函数,也知道有JNI机制和native方法的存在。终于,昨天开始打算研究一下JNI,今天做了一个例子,这个例子是在Windows环境下运行一个具有native方法的java类。1.创建一个InvokeNative.java文件,编辑内容如下package com.jni;public class InvokeNative {
2011-12-15 15:46:07
3142
原创 字母索引查询ListView组件
现在很多Android应用都做了类似IOS的字母索引查询功能,今天我将这个功能封装成了一个组件当点击或者在字母上上下移动时的画面package com.alphabet.widget;import android.content.Context;import android.graphics.Color;import android.os.Handler;
2011-12-13 17:43:46
6348
2
原创 Java实现啥夫曼编码
在开发手机程序时,总是希望压缩网络传输的信息,以减少流量。本文仅以哈夫曼编码为引导,抛砖引玉,实现压缩功能。大家可能会想,程序和第三方提供了很多压缩方式,何必自己写压缩代码呢?不错,如GZIP这样的压缩工具很多,可是在某些情况下(如文本内容小且字符不重复),GZIP压缩后会比原始文本还要大。所以在某些特殊情况下用自己的压缩方式可以更优。大家可能早已忘记了在学校学习的哈夫曼知识,可以先在百度
2011-12-13 10:28:37
1451
1
转载 编写高效的Android代码
在Android开发和查看Framework源代码过程中,发现Android摒弃了Web开发中的一些真理。对此很不能理解,下面来了解为什么Android要如此?Android设备是嵌入式设备。现代的手持设备,与其说是电话,更像一台拿在手中的电脑。但是,即使是“最快”的手持设备,其性能也赶不上一台普通的台式电脑。 这就是为什么我们在书写Android应用程序的时候要格外关注效率。这些设
2011-12-02 10:01:50
1370
原创 WebView用法与JS交互
这篇文章讲了一些WevView的使用方法,在项目中,常常会使用到,尤其是需要与JS交互。效果图点击“调用alert”按钮,在Android中捕获JS alert,并用Android组件(AlertDialog)替换点击“调用java方法”按钮,在JS中调用并传递参数到Java中的方法点击“调JS方法”按钮(这个按钮不是html元素,而
2011-11-29 14:57:33
30012
3
原创 几种常用BroadcastReceiver
开机广播可在此广播中做开机自启动服务public class BootBroadcasrReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("CDH", "开机广播"); }}
2011-11-27 15:06:57
4883
原创 BroadcastReceiver使用方式
从行为上广播类型有两种:无序广播(Normal broadcasts):无序且并行执行广播有序广播(Ordered broadcasts):有序地一个接一个执行广播当通过意图发送广播时,无论BroadcastReceiver定义在当前应用还是其他应用中,只要BroadcastReceiver对此意图感兴趣(如:匹配Action),就会得到执行。有序广播和无序广播默认都是运行在U
2011-11-26 21:51:05
4900
原创 Android IPC进程通信——Messager方式
Android IPC通信有两种方式,上一篇文章深入分析AIDL原理讲解了AIDL方式,这篇文章讲解另一种IPC通信方式——Messager方式。Messager实现IPC通信,底层也是使用了AIDL方式。和AIDL方式不同的是,Messager方式是利用Handler形式处理,因此,它是线程安全的,这也表示它不支持并发处理;而AIDL方式是非线程安全的,支持并发处理,因此,我们使用AIDL方
2011-11-25 00:06:40
14646
原创 深入分析AIDL原理
在上一篇文章(Service使用方式)中,介绍了Android进程间通信(IPC)的使用,并给出了一个示例。但并没有深入分析aidl是怎样可以做到进程间通信的,它的执行过程是怎样的?这篇文章来分析IRemoteService.aidl的执行过程,并理解aidl是怎样跨进程通信的。 当我们创建IRemoteService.aidl文件时,IDE会为我们在gen目录中创建相应的
2011-11-18 17:29:28
24144
1
深入分析AIDL原理
在上一篇文章(Service使用方式)中,介绍了Android进程间通信(IPC)的使用,并给出了一个示例。但并没有深入分析aidl是怎样可以做到进程间通信的,它的执行过程是怎样的?这篇文章来分析IRemoteService.aidl的执行过程,并理解aidl是怎样跨进程通信的。 当我们创建IRemoteService.aidl文件时,IDE会为我们在gen目录中创建相应的文件。 ...
2011-11-13 16:14:54
230
Service使用方式
使用Service的场合:1.一个或多个Activity需要向同一应用中的Service发出执行某一操作的命令。PS:不需要绑定 2.某个Activity需要同一应用中的Service为其单独服务,当此Activity消毁时,也将为其服务的Service一并消毁。PS:需要绑定 3.多个Activity绑定到同一个Service,仅当所有A...
2011-11-13 15:23:54
133
在onCreate方法中获取某个View的宽度和高度
有时候需要在onCreate方法中知道某个View组件的宽度和高度等信息,而直接调用View组件的getWidth()、getHeight()、getMeasuredWidth()、getMeasuredHeight()、getTop()、getLeft()等方法是无法获取到真实值的,只会得到0。这是因为View组件布局要在onResume回调后完成。下面提供实现方法,onGlobalLayout...
2011-10-08 14:54:36
149
不加载图片,仅仅获取图片文件分辨率
当从SD卡中获取图片时,如果图片太大,加载会出现溢出异常。因此,需要先获取到分辨率,再对大图片按分辨率比率缩小后加载,这样就能够防止溢出异常。BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; Bitmap bit...
2011-10-08 11:09:11
209
图片移动和缩放
import android.graphics.Matrix;import android.graphics.PointF;import android.util.FloatMath;import android.util.Log;import android.view.MotionEvent;import android.view.View;import andro...
2011-09-29 22:15:08
151
定时任务
定时任务有执行一次和重复执行两种public class AlarmBroadcast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, R.string.show_...
2011-09-28 00:53:14
97
多渠道打包工具V2.1
2013-11-14
语音Demo(SDK版)——Speex压缩
2013-11-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人