android怎么写jni
1.如何在Android下使用JNI
Android中JNI是编译so库的源代码,编译成功后会生成SO库,android中最终是使用SO库的。
1.android的NDK开发需要在linux下进行: 因为需要把C/C++编写的代码生成能在arm上运行的.so文件,这就需要用到交叉编译环境,而交叉编译需要在linux系统下才能完成。2.安装android-ndk开发包,这个开发包可以在google android 官网下载: 通过这个开发包的工具才能将android jni 的C/C++的代码编译成库3.android应用程序开发环境: 包括eclipse、java、android sdk、adt等。
NDK编译步骤:1.选择 ndk 自带的例子 hello-jni ,我的位于E:\android-ndk-r5\samples\hello-jni( 根据具体的安装位置而定 ) 。2.运行 cygwin ,输入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,进入到 E:\android-ndk-r5\samples\hello-jni 目录。
3.输入 $NDK/ndk-build ,执行成功后,它会自动生成一个 libs 目录,把编译生成的 .so 文件放在里面。 ($NDK是调用我们之前配置好的环境变量, ndk-build 是调用 ndk 的编译程序 )4.此时去 hello-jni 的 libs 目录下看有没有生成的 .so 文件,如果有,ndk 就运行正常啦。
2.在android平台下写得JNI放在项目哪里呢,JNI后缀名是什么
原java语言编写的类仍放工程的src文件目录下,方法用native关键字进行修饰,编译后生成.class文件,在java类中通过静态块引入其调用的本地方法,引入如下:
public class Test{
static {
system.loadlibrary("name"); //引入动态库的名字
}
public native int hello(String str[]);
}
通过用C语言编写的JNI方法的头文件要包含java类通过java -h进行编译后的头文件。编写完JNI方法后,通过编译工具生成动态库文件(name.dll文件或name.so文件)(例如可把其放到jdk\bin目录下,也可把动态库放到工程同classes同文件夹的目录下),把该文件放于系统环境变量path中路径所在文件中,即可引入。
3.如何在Android下使用JNI
1.引言 我们知道,Android系统的底层库由c/c++编写,上层Android应用程序通过Java虚拟机调用底层接口,衔接底层c/c++库与Java应用程序间的接口正是JNI(JavaNative Interface)。
本文描述了如何在ubuntu下配置AndroidJNI的开发环境,以及如何编写一个简单的c函数库和JNI接口,并通过编写Java程序调用这些接口,最终运行在模拟器上的过程。 2.环境配置 2.1.安装jdk1.6 (1)从jdk官方网站下载jdk-6u29-linux-i586.bin文件。
(2)执行jdk安装文件 [html] view plaincopyprint? 01.$chmod a+x jdk-6u29-linux-i586.bin 02.$jdk-6u29-linux-i586.bin $chmod a+x jdk-6u29-linux-i586.bin $jdk-6u29-linux-i586.bin (3)配置jdk环境变量 [html] view plaincopyprint? 01.$sudo vim /etc/profile 02.#JAVAEVIRENMENT 03.exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29 04.exportJRE_HOME=$JAVA_HOME/jre 05.exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH 06.exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH $sudo vim /etc/profile #JAVAEVIRENMENT exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29 exportJRE_HOME=$JAVA_HOME/jre exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH 保存后退出编辑,并重启系统。 (4)验证安装 [html] view plaincopyprint? 01.$java -version 02.javaversion "1.6.0_29" 03.Java(TM)SE Runtime Environment (build 1.6.0_29-b11) 04.JavaHotSpot(TM) Server VM (build 20.4-b02, mixed mode) 05.$javah 06.用法:javah[选项]<类> 07.其中[选项]包括: 08.-help输出此帮助消息并退出 09.-classpath<路径>用于装入类的路径 10.-bootclasspath<路径>用于装入引导类的路径 11.-d<目录>输出目录 12.-o<文件>输出文件(只能使用-d或-o中的一个) 13.-jni生成JNI样式的头文件(默认) 14.-version输出版本信息 15.-verbose启用详细输出 16.-force始终写入输出文件 17.使用全限定名称指定<类>(例 18.如,java.lang.Object)。
$java -version javaversion "1.6.0_29" Java(TM)SE Runtime Environment (build 1.6.0_29-b11) JavaHotSpot(TM) Server VM (build 20.4-b02, mixed mode) $javah 用法:javah[选项]<类> 其中[选项]包括: -help输出此帮助消息并退出 -classpath<路径>用于装入类的路径 -bootclasspath<路径>用于装入引导类的路径 -d<目录>输出目录 -o<文件>输出文件(只能使用-d或-o中的一个) -jni生成JNI样式的头文件(默认) -version输出版本信息 -verbose启用详细输出 -force始终写入输出文件 使用全限定名称指定<类>(例 如,java.lang.Object)。2.2.安装android应用程序开发环境 ubuntu下安装android应用程序开发环境与windows类似,依次安装好以下软件即可: (1)Eclipse (2)ADT (3)AndroidSDK 与windows下安装唯一不同的一点是,下载这些软件的时候要下载Linux版本的安装包。
安装好以上android应用程序的开发环境后,还可以选择是否需要配置emulator和adb工具的环境变量,以方便在进行JNI开发的时候使用。配置步骤如下: 把emulator所在目录android-sdk-linux/tools以及adb所在目录android-sdk-linux/platform-tools添加到环境变量中,android-sdk-linux指androidsdk安装包android-sdk_rxx-linux的解压目录。
[plain] view plaincopyprint? 01.$sudo vim /etc/profile 02.exportPATH=~/software/android/android-sdk-linux/tools:$PATH 03. exportPATH=~/software/android/android-sdk-linux/platform-tools:$PATH $sudo vim /etc/profile exportPATH=~/software/android/android-sdk-linux/tools:$PATH exportPATH=~/software/android/android-sdk-linux/platform-tools:$PATH 编辑完毕后退出,并重启生效。 2.3.安装NDK NDK是由android提供的编译android本地代码的一个工具。
(1)从androidndk官网下载ndk,目前最新版本为android-ndk-r6b-linux-x86.tar.bz2. (2)解压ndk到工作目录: [plain] view plaincopyprint? 01.$tar -xvf android-ndk-r6b-linux-x86.tar.bz2 02.$sudo mv android-ndk-r6b /usr/local/ndk $tar -xvf android-ndk-r6b-linux-x86.tar.bz2 $sudo mv android-ndk-r6b /usr/local/ndk (3)设置ndk环境变量 [plain] view plaincopyprint? 01.$sudo vim /etc/profile 02.exportPATH=/usr/local/ndk:$PATH $sudo vim /etc/profile exportPATH=/usr/local/ndk:$PATH 编辑完毕后保存退出,并重启生效 (4)验证安装 [plain] view plaincopyprint? 01.$ cd/usr/local/ndk/samples/hello-jni/ 02.$ ndk-build 03.Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver 04.Gdbsetup : libs/armeabi/gdb.setup 05.Install : libhello-jni.so => libs/armeabi/libhello-jni.so $ cd/usr/local/ndk/samples/hello-jni/ $ ndk-build Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver Gdbsetup : libs/armeabi/gdb.setup Install : libhello-jni.so => libs/armeabi/libhello-jni.so 3.JNI实现 我们需要定义一个符合JNI接口规范的c/c++接口,这个接口不用太复杂,例如输出一个字符串。接下来。
4.android studio 怎样进行jni开发
方法如下:
1.添加如下代码在MainActivity类内
static {
System.loadLibrary("hello_jni");
}
public native String getstringfromC();
2.打开终端,android studio已经提供了终端
3.首先进入java目录执行命令:
javah -d ../jni com.example.root.ndk_sample.MainActivity
com.example.root.ndk_sample.MainActivity是native函数的所在的包名和类名,中间使用“.”号分开
4.添加*.c文件在jni目录中
5.编写Android.mk和Application.mk 放在jni目录下面
6.Android.mk文件的内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=hello_jni
LOCAL_SRC_FILES := hello_jni.c
include $(BUILD_SHARED_LIBRARY)
Application.mk 文件内容为:
APP_ABI := all
APP_OPIM :=debug
5.如何在android源码中添加自己的jni方法
1,、项目实现了一个简单的四则运算,项目的目录层次如下:AndroidManifest.xml Android.mk jni res src资源文件简简单单,一个布局文件,稍后会有demo的下载地址主要记录备忘的内容如下:MainActivity.Java[html] view plain copypublic native int add(int x, int y);public native int substraction(int x, int y);public native float multiplication(int x, int y);public native float division(int x, int y);static{System.loadLibrary("arithmetic");}2、生成lib的名称为libarithmetic.so.注意load的时候写"arithmetic"jni 目录下有两个文件,一个是Android.mk,一个是c++源文件long.cppjni/Android.mk如下:[html] view plain copyLOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE:= libarithmeticLOCAL_SRC_FILES:= \long.cppLOCAL_SHARED_LIBRARIES := \libutilsLOCAL_STATIC_LIBRARIES :=LOCAL_C_INCLUDES += \$(JNI_H_INCLUDE)LOCAL_CFLAGS +=LOCAL_PRELINK_MODULE := falseinclude $(BUILD_SHARED_LIBRARY)3、注释:LOCAL_PATH(必须定义,而且要第一个定义),宏函数'my-dir', 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录);include $( CLEAR_VARS),CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等。)
除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的;LOCAL_MODULE_TAGS :=user eng tests optionaluser: 指该模块只在user版本下才编译eng: 指该模块只在eng版本下才编译tests: 指该模块只在tests版本下才编译optional:指该模块在所有版本下都编译LOCAL_MODULE(必须定义),标识你在Android.mk文件中描述的每个模块。
名称必须是唯一的,而且不包含任何空格。Note:编译系统会自动产生合适的前缀和后缀,例如:arithmetic编译成功后将生成libarithmetic.so库文件LOCAL_SRC_FILES 变量必须包含将要编译打包进模块中源代码文件。
不用在这里列出头文件和包含文件。LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称LOCAL_STATIC_LIBRARIES加入所需要链接的静态库(*.a)的名称LOCAL_CFLAG可选的编译器选项,用法之一是定义宏,例如LOCAL_CFLAGS := -Werror作用是编译警告也作为错误信息LOCAL_PRELINK_MODULE:=false,不作prelink处理,默认是要prelink操作的,有可能造成地址空间冲突(这地方目前还不明白) long.cpp源代码如下:[html] view plain copy#define LOG_TAG "LongTest2 long.cpp"#include#include#include "jni.h"jint add(JNIEnv *env, jobject thiz, jint x, jint y){return x + y;}jint substraction(JNIEnv *env, jobject thiz, jint x, jint y){return x - y;}jfloat multiplication(JNIEnv *env, jobject thiz, jint x, jint y){return (float)x * (float)y;}jfloat division(JNIEnv *env, jobject thiz, jint x, jint y){return (float)x/(float)y;}static const char *classPathName = "com/inspur/test2/MainActivity";static JNINativeMethod methods[]= {{"add", "(II)I", (void*)add},{"substraction", "(II)I", (void*)substraction},{"multiplication", "(II)F", (void*)multiplication},{"division", "(II)F", (void*)division},};typedef union{JNIEnv* env;void* venv;}UnionJNIEnvToVoid;static int registerNativeMethods(JNIEnv* env, const char* className,JNINativeMethod* gMethods, int numMethods){jclass clazz;clazz = env->FindClass(className);if (clazz == NULL)return JNI_FALSE;if (env->RegisterNatives(clazz, gMethods, numMethods)<0)return JNI_FALSE;return JNI_TRUE;}static int registerNatives(JNIEnv *env){if (!registerNativeMethods(env, classPathName,methods, sizeof(methods)/sizeof(methods[0]))){return JNI_FALSE;}return JNI_TRUE;}jint JNI_OnLoad(JavaVM* vm, void* reserved){UnionJNIEnvToVoid uenv;uenv.venv = NULL;jint result = -1;JNIEnv *env = NULL;if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK){goto bail;}env = uenv.env;env = uenv.env;if (registerNatives(env) != JNI_TRUE){goto bail;}result = JNI_VERSION_1_4;bail:return result;}除了利用 编写native JAVA类,通过javah生成.h文件,根据.h文件编写.c/cpp文件 方法外(名字像老太太的裹脚步,又臭又长,而且不灵活),Android还可以通过引用JNI_Onload方式实现。
jint JNI_onLoad(JavaVM* vm, void* reverced),改方法在so文件被加载时调用。JNI_OnLoad()有两个重要的作用:指定JNI版本:告诉VM该组件使用那一个JNI版本(若未提供JNI_OnLoad()函数,VM会默认该使用最老的JNI 1.1版),如果要使用新版本的JNI,例如JNI 1.4版,则必须由JNI_OnLoad()函数返回常量JNI_VERSION_1_4(该常量定义在jni.h中) 来告知VM。
初始化设定,当VM执行到System.loadLibrary()函数时,会立即先呼叫JNI_。
6.Android Studio怎么用JNI编写出Hello World
第一步:
在自己项目中创建一个包含native的方法类HelloWorld.java -->包名com.ningso.ningsodemo
public class HelloWorld {
public native String sayHello(String name); // 1.声明这是一个native函数,由本地代码实现
static {
System.loadLibrary("hello"); // 2.加载实现了native函数的动态库,只需要写动态库的名字
}
}
第二步:
在终端执行javac命令将.java源文件编译成.class字节码文件
执行javac命令
-d 表示将编译后的class文件放到指定的文件夹下面
结果图:
编译后的字节码文件
以上也可以直接执行./gradlew build 不过文件就要自己去找了,该class在你的/app/build/intermediates/classes/debug文件夹对应的包名下
第三步:
继续在终端执行javah -jni命令 根据class文件生产.h头文件
Paste_Image.png
注意:-d和-o只能使用其中一个参数。
参数说明:classpath:类搜索路径,这里表示从当前的 bin 目录下查找
-d:将生成的头文件放到当前的 jni 目录下
-o: 指定生成的头文件名称,默认以类全路径名生成(包名+类名.h)
7.android开发 如何在jni本地代码 访问自己写的类
jclass GpsInfoClass = env->FindClass("com/parser/GPSINFO");
jfieldID ID_bValid = env->GetFieldID(GpsInfoClass,"bValid","I");
jfieldID ID_bSpeed = env->GetFieldID(GpsInfoClass,"bSpeed","I");
env->SetIntField(_obj,ID_bValid,(jint)info.bValid);
env->SetIntField(_obj,ID_bSpeed,(jint)info.bSpeed);
return _obj;
以上就可以了。但是不知道你的BYTE是自定义的什么类型,如果是char之类的,就另外想办法转换成jint。其中 _obj 变量是public native GPSINFO getGpsInfo();这个本地方法在C代码中的参数:JNIEXPORT jobject JNICALL Java_com_parser_GPSINFO_ getGpsInfo(JNIEnv *env, jobject _obj)
8.在android平台下写得JNI放在项目哪里呢,JNI后缀名是什
原java语言编写的类仍放工程的src文件目录下,方法用native关键字进行修饰,编译后生成。
class文件,在java类中通过静态块引入其调用的本地方法,引入如下:public class Test{ static { system。 loadlibrary("name"); //引入动态库的名字 }public native int hello(String str[]);}通过用C语言编写的JNI方法的头文件要包含java类通过java -h进行编译后的头文件。
编写完JNI方法后,通过编译工具生成动态库文件(name。dll文件或name。
so文件)(例如可把其放到jdkin目录下,也可把动态库放到工程同classes同文件夹的目录下),把该文件放于系统环境变量path中路径所在文件中,即可引入。
9.如何在Android下使用JNI
第一步: 使用Java编写HelloWorld 的Android应用程序: 复制代码 package com.lucyfyr; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.v("dufresne", printJNI("I am HelloWorld Activity")); } static { //加载库文件 System.loadLibrary("HelloWorldJni"); } //声明原生函数 参数为String类型 返回类型为String private native String printJNI(String inputStr); } 复制代码 这一步我们可以使用eclipse来生成一个App; 因为eclipse会自动为我们编译此Java文件,后面要是用到。
第二步: 生成共享库的头文件: 进入到eclipse生成的Android Project中 :/HelloWorld/bin/classes/com/lucyfyr/ 下: 可以看到里面后很多后缀为.class的文件,就是eclipse为我们自动编译好了的java文件,其中就有: HelloWorld.class文件。 退回到classes一级目录:/HelloWorld/bin/classes/ 执行如下命令: javah com.lucyfyr.HelloWorld 生成文件:com_lucyfyr_HelloWorld.h 复制代码 /* DO NOT EDIT THIS FILE - it is machine generated */ #include
当然函数名太长,可以在.c文件中通过函数名映射表来实现简化。 第三步: 实现JNI原生函数源文件: 新建com_lucyfyr_HelloWorld.c文件: 复制代码 #include
(*env)->ReleaseStringUTFChars(env, inputStr, (const char *)str ); return (*env)->NewStringUTF(env, "Hello World! I am Native interface"); } /* This function will be call when the library first be load. * You can do some init in the libray. return which version jni it support. */ jint JNI_OnLoad(JavaVM* vm, void* reserved) { void *venv; LOGI("dufresne----->JNI_OnLoad!"); if ((*vm)->GetEnv(vm, (void**)&venv, JNI_VERSION_1_4) != JNI_OK) { LOGE("dufresne--->ERROR: GetEnv failed"); return -1; } return JNI_VERSION_1_4; } 复制代码 onl oadJava_com_lucyfyr_HelloWorld_printJNI 函数里面做一些log输出 注意JNI中的log输出的不同。 JNI_OnLoad函数JNI规范定义的,当共享库第一次被加载的时候会被回调, 这个函数里面可以进行一些初始化工作,比如注册函数映射表,缓存一些变量等, 最后返回当前环境所支持的JNI环境。
本例只是简单的返回当前JNI环境。 第四步: 编译生成so库 编译com_lucyfyr_HelloWorld.c成so库可以和app一起编译,也可以都单独编译。
在当前目录下建立jni文件夹:HelloWorld/jni/ 下建立Android.mk ,并将com_lucyfyr_HelloWorld.c和 com_lucyfyr_HelloWorld.h 拷贝到进去 编写编译生成so库的Android.mk文件: 复制代码 LOCAL_PATH:= $(call my-dir) # 一个完整模块编译 include $(CLEAR_VARS) LOCAL_SRC_FILES:=com_lucyfyr_HelloWorld.c LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) LOCAL_MODULE := libHelloWorldJni LOCAL_SHARED_LIBRARIES := libutils LOCAL_PRELINK_MODULE := false LOCAL_MODULE_TAGS :=optional include $(BUILD_SHARED_LIBRARY) 复制代码 系统变量解析: LOCAL_PATH - 编译时的目录 $(call 目录,目录….) 目录引入操作符 如该目录下有个文件夹名称 src,则可以这样写 $(call src),那么就会得到 src 目录的完整路径 include $(CLEAR_VARS) -清除之前的一些系统变量 LOCAL_MODULE - 编译生成的目标对象 LOCAL_SRC_FILES - 编译的源文件 LOCAL_C_INCLUDES - 需要包含的头文件目录 LOCAL_SHARED_LIBRARIES - 链接时需要的外部库 LOCAL_PRELINK_MODULE - 是否需要prelink处理 include$(BUILD_SHARED_。
怎么写代码知乎
1.在网吧写代码是怎样一种体验 知乎
那时还在大学暑假期间,学校实验室有项目在赶工,我因为要补牙齿不得不回老家几天。
有时候突然一个电话打来说哪里哪里要修改一下,哪里哪里再加个功能。 那时我家还没有宽带,无线网卡也是慢成狗,只好到小区楼下的网吧交流跟进同步代码。
我家在三线小城市,网吧也是十分落后,机器都是XP,配置网速也好不到哪去。那时候随身wifi刚出,幸好我未雨绸缪买了一个,开自己的笔记本上网。
我家小区对面是个高中,周围都是些学生打MOBA游戏(不在行,分不清是LOL还是DOTA),也有打第一视角射击游戏的(不在行,分不清是CF还是穿越火线)。 他们在被杀死或者等匹配的间隙会看我这边,黑色屏幕和花花绿绿的代码给他们带来不小的视觉冲击,我健步如飞的手指给他们带来不小的心灵震撼,从他们的眼神中我分明看到对代码的好奇,对IT行业的向往。
直到一位小弟忍不住了,噙着泪水问我是不是在电脑城工作,可不可以帮他刷个黄钻并且盗他兄弟的QQ号,我终于发怒了,默默写了个for循环在电脑屏幕上骂了他一百次。 然而我有着被导师骂一百次的心理素质,迅速平静下来,让他把QQ号和密码告诉我,今晚帮他全钻刷齐,附赠全套QQ秀,报酬是帮我付这次的上网钱。
他高兴坏了,连忙把账号密码抄在我胳膊上(佛说 随身带笔的男孩 运气不会太差)。 这号我时常登录,见证了他被女孩子劈腿两次的悲伤故事,看到了他加密相册里各种以网吧为背景的杀马特自拍。
我还帮他删了几次来自备注“伤我最深的你”的矫情留言,拉黑几个在他自拍下评论“帅”“酷”的虚伪之徒。希望他在感叹人工智能强大的同时,还能回忆起偶遇的电脑城的我,深藏功与名。
2.里面代码要怎么写
1. 打好基础写出高质量代码,并不是搭建空中楼阁,需要有一定的基础,这里我重点强调与代码质量密切相关的几点:掌握好开发语言,比如做Android就必须对Java足够熟悉,《Effective Java》一书就是教授大家如何更好得掌握Java, 写出高质量Java代码。
熟悉开发平台, 不同的开发平台,有不同的API, 有不同的工作原理,同样是Java代码,在PC上写与Android上写很多地方不一样,要去熟悉Android编程的一些特性,iOS编程的一些特性,了解清楚这些,才能写出更加地道的代码,充分发挥各自平台的优势。基础的数据结构与算法,掌握好这些在解决一些特定问题时,可以以更加优雅有效的方式处理。
基础的设计原则,无需完全掌握23种经典设计模式,只需要了解一些常用的设计原则即可,甚至你也可以只了解什么是低耦合,并在你的代码中坚持实践,也能写出很不错的代码。2. 代码标准代码标准在团队合作中尤为重要,谁也不希望一个项目中代码风格各异,看得让人糟心,即便是个人开发者,现在也需要跟各种开源项目打交道。
标准怎么定是一个老生常谈的话题,我个人职业生涯中经历过很多次的代码标准讨论会议,C++, C#, Java等等,大家有时会坚持自己的习惯不肯退让。可现如今时代不一样了,Google等大厂已经为我们制定好了各种标准,不用争了,就用这些业界标准吧。
3. 想好再写除非你很清楚你要怎么做,否则我不建议边做边想。你真的搞清楚你要解决的问题是什么了吗?你的方案是否能有效?有没有更优雅简单的方案?准备怎么设计它,必要的情况下,需要有设计文档,复杂一些的设计需要有同行评审,写代码其实是很简单的事情,前提是你得先想清楚。
4. 代码重构重构对于代码质量的重要性不言而喻,反正我是很难一次把代码写得让自己满意、无可挑剔,《重构》这本书作为业内经典也理应人人必读,也有其他类似的教授重构技巧的书,有些也非常不错,遗憾的是我发现很多工作多年的同学甚至都没有了解过重构的概念。5. 技术债务知乎上最近有个热门问题《为什么有些大公司技术弱爆了?》,其实里面提到的很多归根结底都是技术债务问题,这在一些大公司尤为常见。
技术债务话题太大,但就代码质量而言,我只想提一下不要因为这些债是前人留下的你就不去管,现实是没有多少机会让你从一个清爽清新的项目开始做起,你不得不去面对这些,你也没法完全不跟这些所谓的烂代码打交道。因此我建议各位:当你负责一个小模块时,除了把它做好之外,也要顺便将与之纠缠在一起的技术债务还掉,因为这些债务最终将是整个团队来共同承担,任何一个人都别想独善其身,如果你还对高质量代码有追求的话。
作为团队的技术负责人,也要顶住压力,鼓励大家勇于做出尝试,引导大家不断改进代码质量,不要总是畏手畏脚,停滞不前,真要背锅也得上,要有担当。6. 代码审查我曾经听过一些较高级别的技术分享,竟然还不时听到一些呼吁大家要做代码审查的主题,我以为在这个级别的技术会议上,不应再讨论代码审查有什么好,为什么要做代码审查之类的问题。
同时我接触过相当多所谓国内一线互联网公司,竟有许多是不做代码审查的,这一度让我颇为意外。这里也不想多谈如何做好代码审查,只是就代码质量这点,不客气地说:没有过代码审查经历的同学,往往很难写出高质量的代码,尤其是在各种追求速度的糙快猛创业公司。
7. 静态检查很多代码上的问题,都可以通过一些工具来找到,某些场景下,它比人要靠谱得多,至少不会出现某些细节上的遗漏,同时也能有效帮助大家减少代码审查的工作量。Android开发中有Lint, Find bugs, PMD等优秀静态检查工具可用,通过改进这些工具找出的问题,就能对语法的细节,规范,编程的技巧有更多直观了解。
建议最好与持续集成(CI),代码审查环境配套使用, 每次提交的代码都能自动验证是否通过了工具的代码检查,通过才允许提交。8. 单元测试Android单元测试,一直备受争议,主要还是原生的测试框架不够方便,每跑一次用例需要在模拟器或者真机上运行,效率太低,也不方便在CI环境下自动构建单元测试,好在有Robolectric,能帮我们解决部分问题。
单元测试的一个非常显著的优点是,当你需要修改大量代码时,尽管放心修改,只需要保证单元测试用例通过即可,无需瞻前顾后。9. 充分自测有一种说法:程序员最害怕的是他自己写的代码,尤其是准备在众人面前show自己的工作成果时,因此在写完代码后,需要至少跑一遍基本的场景,一些简单的异常流。
在把你的工作成果提交给测试或用户前,充分自测是基本的职业素养,不要总想着让测试帮你找问题,随便用几下就Crash的东西,你好意思拿给别人吗?10. 善用开源并非开源的东西,质量就高,但至少关注度较高,使用人数较多,口碑较好的开源项目,质量是有一定保证的,这其中的道理很简单。即便存在一些问题,也可以通过提交反馈,不断改进。
最重要的是,你自己花时间造的轮子,需要很多精力维护,而充分利用开源项目,能帮助你节省很多时间,把精力专注在最需要你关心的问题上。更主要是传播了振动的能量。
当。
3.为什么学了那么久的编程还是感觉自己什么都做不出来
1. 如果是基础能力不扎实,需要边学边练。在学完一个知识点及时做题练习和回顾,力求了解这个知识点的更多细节。
2. 学习编程时写的代码只是为了打好基础,但真正开发应用时则是将各种学到的知识综合应用起来,形成一个实体。厨师基本功是掌握和应用各种原材料,然后将不同原材料结合起来做成一道菜,就像将学过的代码知识综合起来应用,形成一个具体的软件。因此学了知识后,尝试着多去做一些应用来练手比较好。
3. 学会利用社区资源。CSDN、博客园、QQ交流群、知乎甚至贴吧,都可以成为技术学习的来源。比如教学时写的代码可能并没有教如何做一个简单的音乐播放器,那么自己就可以先去百度了解一下大概要用到哪些技术,如何做,以及是否有教学贴之类的。
4. 重点:成品才能检验自己对编程学习能力的掌握情况。这才是最主要的,光学了基础知识,终究只是理论。觉得自己什么都做不出来,要么基础差,要么就是不想动。先尝试着自己去做一点简单的应用,之后再慢慢提升自己。
4.程序员怎么提高自己的开发水平 知乎
自己研究啊,找点小项目来搞搞,搞着搞着你就对技术知道的多了,自己的技术水平自然也就上去了。
比如,自己写个WebServer,写完以后你就知道,从单线程响应,到支持图片、音频啥的,慢慢的,你就能体会server的基本原理;
再比如,自己写个网络爬虫,爬点天气预报数据、新闻啥的,从单线程爬,到多线程爬,从每隔一段时间爬,到每天定时定点爬,从爬不需要登录的,到爬需要登录认证的,完事后,啥是多线程、线程池、怎么模拟登录,你还能不明白?
爬到天气预报,那你还不写个小android/ios/html5程序,把天气呈现出来,从只呈现一个城市的,到呈现可以选城市的,从没有动画的,到有动画的。什么sqlite、自定义控件、handler、ajax、webservice你还会不熟?
我就这么干的,我不是程序猿,这只是我的爱好,但学习让我挺快乐。
5.零基础的小白如何成为一名代码高手
如何成为代码高手
1.最重要的是学会写程序
C语言也好,python也好,你得学会把自己的思考用程序实现。举个例子,你想制定计划表,安排自己的时间,那这个问题就可以写个程序来实现;你想做笔记、管理自己的文件,这也是一个程序。
从简单的、直接的几行十几行程序开始,比如计算器;到复杂的小工具,比如大数计算器。这个过程中你逐渐明白数组、指针、内存布局、函数,了解递归、栈、链表,然后学基本的数据结构。之后再写程序,你需要考虑代码的优雅、简单、时间空间效率高,使用什么样的方式来实现最好。最后你学会了复用,学会了调用系统API,学会了想什么就能用代码实现什么或者知道它不能被实现,你就学会了编程。
编程是一种创造。如果你对创造有兴趣,那么就很容易,反之则很难。
编织,手工,写诗,作曲。这些和编程一样,当产物出来的时候,会有一种特殊的快感。
如果你感受不到这种快感,那么趁早还是换一条路走吧。
作者:Jason He
链接:/question/27254231/answer/36474095
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
自学计算机主要是照着MIT,CMU,Princeton,Stardford这些名校网站上的课程,挑符合自己口味的来学。
这里推荐几门基础课:
1. MIT6.01 Spring 2011, 导论性质的课程。适合大一学生。用的编程语言是 Python。老师课讲得很好。目标是掌握良好的系统思维方法,所谓的PCAP(Primitive, Combination, Abstraction, Pattern)
2. Coursera 上面的 Programming Language 这门课,来自华盛顿大学。系统地学习编程语言和相关理论。课程上用了ML, Racket和Ruby。相关的阅读,可以看Dan Friedman的little 小人书系列,essential of programming language之类。之后便可自称polyglot了。目标是理解编程语言的本质,将来学习新的语法就轻松多了。再NB一些,可以自己创造新的语法了。
3. Coursera 上的Algorithm 这个系列的课,来自Princeton。我觉得是教的最好的算法课,比MIT的6.006 好多了,MIT的老师喜欢在大黑板上狂写,虽然很有激情,但对于算法教学来说,有点low了。初级算法课程还是用动画和图表来得直观一些。
4. MIT6.828 操作系统。课程讲的XV6,一个很简单的操作系统,类unix。实验用JOS,也是一个很简单的操作系统,但是设计思想和XV6 不一样。在自己实现这个操作系统的过程中,可以学到很多东西。
5. Coursera上面的Computer Architecture,同样来自Princeton。讲的是处理器的架构和设计。
对于一个初学者来说,把以上的基础课程刷下来,就上升一个level了。
很多应用的东西,比如Web开发,数据库什么的,就找具体的项目来练手了。
路漫漫其修远兮~~
6.编程中怎么区别属性和方法 知乎
属性的严格写法是
public class a
{
public string a;
public int b;
}
这个才叫属性,属性是一个类的变量,属性作为变量不承担任何计算过程。
而属性过程则不同
属性过程的写法
public class a
{
private string a;
private int b;
public string a
{
get
{
return this.a;
}
set
{
this.a=value;
}
}
public int b
{
get
{
return this.b;
}
set
{
this.b=value;
}
}
}
属性过程则不同,属性过程可以理解为特殊的方法或函数,这个方法只有一个参数并且只能返回一个值。
属性过程的作用在于,对输入数据的有效性处理
设想一下用户注册这个功能
用户注册有一个用户类
用户类有一个属性用户名
public class user
{
public string username;
}
而通常限制用户注册用户名不能为空要在用户界面去限制。
user Objus=new user();
if(Objus.username==null)
{
throw new Exception("用户名不能为空");
}
这样写的确没错,但是如果你登陆里也要限制用户名不能为空,用户修改资料里也得限制,这时候还得写一遍上面的代码,而这样就会有很多重复的代码。
就算你能复制粘贴,这些代码也是重复的每回你也要复制粘贴才可以。
如果用属性过程
public class user
{
private string _username;
public string username
{
get
{
return this._username;
}
set
{
if(value==null)
{
throw new Exception("用户名不能为空");
}
this._username=value;
}
}
}
这时你登陆界面只需两行代码就验证了用户名不能为空
user Objus=new user();
Objus.username=this.Textbox1.Text;
就两行就可以,其他地方也是一样,这就是属性过程。
怎么写代码博客啊
1.怎样使用博客代码
博客代码的使用其实很简单,在很多博客中都带有“源码”功能,它可以把博客代码还原成想要的效果。
但是在bokee中却偏偏没有这个功能,不过也没关系,还有很多方法可以用的下面我简单介绍一些方法吧!可能有些大家都知道的,,
第一种: 利用博客自身所带的“图博”进行编辑,方法是: 登录你博客后点击“我的图博”---“你的个人信息”---“点击这里编辑你的个人信息”--见到“个人自述。”---点击“源代码”--点击“保存”,退出来,再登录你博客后点击“我的图博”---“你的个人信息”,复制计数器到日志里发表就可以了!
第二种:利用其它博客中的“源码”功能进行编辑,方法是:
先申请并登陆一种博客,例如“酷客音乐博客”或“中国教育人博客网”在日志编辑状态先点击一下“源码”然后把代码复制到里面,然后再点击一下源码就可以看到效果了,然后把生成的复制到自己的博客日志中就可以了,是不是这种方法还可以,如果还感觉麻烦,那就看下一种方法吧!!!!
第三种:利用HTML在线编辑器。HTML在线编辑器 HTML在线编辑器2 利用它就可以直接进行编辑了,方法:先打开它们,把HTML代码前面的对号打上,然后把代码复制到里面,然后再把对号去掉就可以看到效果了,最后把它复制到博客中就可以了,,。
三:免费背景音乐
免费背景音乐是什么玩意儿?它是本站给您在您的站点中加入的背景音乐,本站把几十首背景音乐在您的站点中进行随机播放,这样,每次访问者到达您的站点,只要他戴着耳机,就可以听到不同的背景音乐,这一定会让您的站点增色不少。它的效果不能看出来,只能戴上耳机去感受一下。
2.新浪博客在哪写代码
1、控制面板----首页内容维护----定义空白模板----新建,创建模块标题,显示源代码粘贴代码(粘贴代码前,在普通模式下打一个空格,然后再进入源代码编辑模式,这时你会看到源代码中已经有一行代码了( ),这时你再将自己的代码粘贴到它的下面即可,因为CSS代码粘贴到新建立的模块中,没有别的内容,不会显示的)----保存并返回; 2、控制面板----定制我的首页----点添加模块----点选创建好的模块标题---勾上并保存,移动新建面板位置--保存设置。
做第二步的目的是将建立好的模块在博客个人首页里呈现出来。.cn/u/1253830830。
3.blog在哪里写代码
代码的添加可谓是美化博客的基础了!那么我们这里讲讲新浪的博客的的挨骂应该如何添加吧~! 请按着我的步骤来做! 一:点击进入你的控制面板——再点击首页内容维护——在首页内容维护一栏中有个“自定义空白面板”!那么点击进入编辑界面——(弹出一对话框)点击下方的“新增”——可以看到面板简介的下面有一个显示源代码————在显示源代码上打勾——出现了————那么代码就是放在的中间了! 如:代码 添加完之后在——面板标题——上给你的面板起个名字,最后点击保存! 那么这只是做完了添加代码的一步!如果你现在就返回首页上看的话!那么代码的效果是没有显示的! 二:接下来要做的就是让代码的效果显示在你的博客上! 添加完代码之后返回到你的控制面板——点击左侧的“定制我的首页”会弹出你的首页的后台操作!-----你可以看到这个页面的左侧有三个内容,分别是:保存设置--添加模板---刷新 那么你点击--添加模板--会弹出一个对话框!你在自定义空白面板 一栏中选取你刚刚添加的面板代码!也就是你刚才取了名字的面板!最后点击右下侧的选取--保存就可以了!那么你添加的代码效果就将会在你的首页上显示了。
4.怎么做博客啊
我现在和各位一样正在努力做博客.也积累了一些经验.在我的博客里,我整理了一些代码,和一些方法.希望和大家来分享!希望我们能互相学习.都能做出自己满意的东西!
博客代码分类: 网易代码 163博客代码全集
日志背景2
日志背景
精美播放器代码
插入图片.视频.挂件等
给照片加上像框代码
教你设置背景
在介绍17款BLOG宠物
如何在图片中加入文字?
网易涂鸦板代码设置
在博客你加QQ
显示访客IP地址
制作滚动字幕
图片连接移动代码
博客停留时间
博客添加动画
代码间的混合
动画
改变字体和线条颜色的
android怎么写代码
1.android studio 怎么写代码
您好,Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing Gradle
Project ,有时新建项目的时候报 Gradle Project Compile Error 等等相关的问题
解决这些问题办法是
首先打开android studio项目 找到项目目录gradle\wrapper\gradle-wrapper.properties这个文件
内容如下
#Wed Apr 10 15:27:10 PDT
2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" >
3.手机拨号盘在android中怎样写代码
第一步是为这个活动创建一个项目,把项目命名为AndroidPhoneDialer。
下面的插图就是这个项目的新Android项目向导(略)。 在Eclipse内打开的新的应用程序,第一个要做的就是从main.xml中移除包含Hello World 声明的TextView。
在删除了TextView后,main.xml文件应当看起来如下:<?xml version="1.0" encoding="utf-8"?>
你正在使用的是允许你把号码作为了一个URI来传递的过滤器。 下一步就是来创建你的Intent。
创建一个Intent的语法如下:Intent
(列表在文章中:什么是Intent)。要呼叫拨号盘,你需要使用DIAL_ACTION Intent。
要正确的呼叫Intent,使用Intent.DIAL_ACTION这个格式。最后的参数,就是电话号码。
DIAL_ACTION intent把号码作为一个URI。因此,你需要使用Uri.parse来分析出电话号码。
使用Uri.parse将确保DIAL_ACTION intent能够理解你试图拨打的号码。你传递了一个Uri.parse的字符串来展示你要拨打的号码,在本例中是 "tel:5551212" 。
为你项目创建的最后一个呼叫应该像这样:Intent DialIntent = new Intent(Intent.DIAL_ACTION,Uri.parse("tel:5551212"));提示 你使用记号 tel:来呼叫一个指定的电话号码。你还可以使用voicemail来替代tel:呼出一个电话voicemail的快捷方式。
Intent创建后,你现在必须告诉Android你想要拨号盘在新的活动中被启动。要这样做,你使用setLaunchFlags()的Intent方法。
你必须为启动来传递setLaunchFlags()合适的参数。下面是可以设置接受启动旗帜的一组列表:注意在其它情况下,可能会有超过一个的旗帜被设置来完成希望的结果。
● NO_HISTORY_LAUNCH 启动活动,不记录在系统启动历史中 ● SINGLE_TOP_LAUNCH 告诉系统不要启动活动,如果该活动已经在运行 ● NEW_TASK_LAUNCH 启动活动 ● MULTIPLE_TASK_LAUNCH 启动活动,即使它已经在运行了 ● FORWARD_RESULT_LAUNCH 允许新的活动来接受结果,这个结果通常被转递给现存的活动。本例中,你要使用intent.NEW_TASK_LAUNCH,这样可以简单的让你打开一个新的拨号盘活动示例:DialIntent.setLaunchFlags(Intent.NEW_TASK_LAUNCH ); 创建拨号盘的最后一步是启动活动。
(更精确的说,你告诉Android你有一个作为新任务来启动的拨号盘。最终由Android来启动拨号盘活动)。
要告诉Android你要启动拨号盘,你需要使用startActivity():startActivity(DialIntent); 请注意到你把intent传递到startActivity()。这个Intent然后传递到Andriod,然后活动被执行。
完整的AndroidPhoneDialer.java文件代码应当如下:package android_programmers_guide.AndroidPhoneDialer; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.net.Uri; public class AndroidPhoneDialer extends Activity { /** Called when the Activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); /** Create our Intent to call the Dialer */ /** Pass the Dialer the number 5551212 */ Intent DialIntent = new Intent(Intent.DIAL_ACTION,Uri.parse("tel:5551212")); /** Use NEW_TASK_LAUNCH to launch the Dialer Activity */ DialIntent.setLaunchFlags(Intent.NEW_TASK_LAUNCH ); /** Finally start the Activity */ startActivity(DialIntent); } } 你现在应当来编译AndroidPhoneDialer并且在模拟器中运行它。处理编译和运行应用程序的过程在前面的章节中描述过了。
你应当已经熟悉这些过程了。一旦你运行应用程序,模拟器启动。
在漫长的启动过程后,你的活动被启动。提示 保持模拟器运行是一个好主意,即使你完成了你的活动并且以及返回到代码窗口。
大多数人的本能习惯是在他们完成了测试活动后关闭模拟器。但是,我发现使模拟器一直开启会帮助两个主要的问题。
第一个就是启动模拟器要花费大量的时间。保持模拟器开启会避开漫长的开启时间。
第二,我已经注意到有好几次当我做一些小的修改到一个活动,而且它们没有被复制到模拟器。保持模拟器开启似乎可以缓解这个问题。
如果你在模拟器中有问题,在你的电脑中移除userdata-qemu.img文件。这个会让模拟器从一个干净的镜像启动。
4.android怎么写一个代码可以使得打开一个应用软件时就先出现一个页
package com.example.lx56;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
public class Splash extends Activity {
private final int SPLASH_DISPLAY_LENGHT = 2000; //延迟2秒
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
new Handler().postDelayed(new Runnable(){//延迟发送runnable对象,封装成message
@Override
public void run() {
Intent mainIntent = new Intent(Splash.this,Login.class);
Splash.this.startActivity(mainIntent);
Splash.this.finish();
}
}, SPLASH_DISPLAY_LENGHT);
}
}
5.Android中怎么用纯代码编写布局
很麻烦,总之。
我以相对布局为例子说明下 btn1 = new Button(this); btn1.setText("我是按钮"); btn1.setId(ID_BTN1); RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); lp1.addRule(RelativeLayout.ALIGN_WITH_PARENT_TOP); lp1.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); // btn1 位于父 View 的顶部,在父 View 中水平居中 rl = new RelativeLayout(this); rl.addView(btn1, lp1 ); //然后在在onCreate()方法里用 setContentView(rl);。
ps怎么写代码
1.ps做出来的图片如何生成html代码
ps中可以在保存时将保存的格式选择为“html和图像”。
1、将图片处理完成后,点击ps顶部菜单栏上的“文件”按钮,在展开的菜单中点击“导出”按钮,然后再点击“存储为Web所用格式”按钮:
2、在弹出的窗口中点击“存储。”按钮进入存储界面:
3、进入存储界面后,将下方格式选择为“HTML和图像”,然后点击“保存”按钮保存即可:
2.如何用ps获得图片代码
虽然我不是一个PS高手 但是PS只是处理图片用的把 不过我还是帮LZ百度了一下 发觉也没这方面的资料 不过获取图片的代码我就找了几篇文章
【插图】
1.如果是你本地机上的图片,你可以在发表文章时点击编辑器左下角的“图片剪贴板”,通过“浏览”选中本地机中的图片,再点击“插入图片”就可以了,你提交文章时图片将会随之上传到新浪博客服务器中,但必须注意上传的图片应该是.jpg或是.gif格式的,字节数不能大于200K。
2.如果想插入的是网络上的美图,那么可以点击编辑器工具栏上的黄色山形标志,在弹出的页面中输入图片的网址就可以了。查看图片网址的方法很简单,将鼠标悬停在图片上方,单击右键,查看属性,其中url就是图片的网络地址,这个地址可以复制。
【图片背景】
如果希望在发表的文章下面安置一个漂亮的背景图,使文字出现在图片之上,那么可以设置文章的图片背景。步骤如下:
1.插入一个文字框,在框内写好文章;
2.勾选编辑器左下角的“源代码”,在源代码中找出background=图片的网络地址 style="backgroundrepeat:repeat-no; 50% 50%"
3.对上述代码的解释:
backgroundrepeat是指这张背景图是否重复覆盖整个背景,默认的是重复覆盖;如果你用的是一张很大的图,只用单张的图片做背景就可以了,不需要它重复的话,代码是backgroundrepeat:repeat-no;如果你用的是一张竖形图片,需要它横向重复的话,代码是 backgroundrepeat:repeat-x;如果你用的是一张横形图片,需要它竖向重复,代码是backgroundrepeat: repeat-y
人工查找+打字 采用我把
android中怎么写文件
1.android 如何读写文件
读文件:
1、通过File获取文件
2、打开输入流,读取文件
写文件:
1、创建文件
2、打开输出流,写入文件内容
示例:
读文件:
String content = ""; //文件内容字符串
//通过路径/sdcard/foo.txt打开文件
File file = new File("/sdcard/foo.txt");
try {
InputStream instream = new FileInputStream(file);//读取输入流
InputStreamReader inputreader = new InputStreamReader(instream);//设置流读取方式
BufferedReader buffreader = new BufferedReader(inputreader);
while (( line = buffreader.readLine()) != null) {
content += line + "\n";//读取的文件内容
}
}catch(Exception ex){
}写文件:
File file = new File("/sdcard/foo.txt");//
if(!file.exists())
file.createNewFile();//如果文件不存在,创建foo.txt
try {
OutputStream outstream = new FileOutputStream(file);//设置输出流
OutputStreamWriter out = new OutputStreamWriter(outstream);//设置内容输出方式
out.write("文字内容");//输出内容到文件中
out.close();
} catch (java.io.IOException e) {
e.printStackTrace();
}
2.Android 怎样在应用程序中向文件里写入数据
1. Android 怎样在应用程序中向文件里写入数据?在AndroidManifest.xml中添加,
注:resource和assets中的文件用户方面是只可以读取不能够进行写的操作的。 Content Provider作为程序之间唯一共享数据途径,用在这里不是很合适。
所以, 第一种方式,使用FileInputStream,FileOutputStreamdui类实现文件I/O操作,直接往手机中存储数据。 第二种方式,使用SQLite,通过SQLiteDatabase类中方法操作数据。
第三种方式,Preference用于存储简单数据类型的数据,一些设置信息的保存。个人认为用在这里最合适。
它利用键值对存储的。例: 存储:SharedPreferences.Editor editor =sp.edit(); editor.putString(KEY_TEXT,"yonghu"); editor.commit(); 获取 :sp =getPreferences(MODE_PRIVATE); String result =sp.getString(KEY_TEXT,null) 3. Android保存数据几种常用方法解析 它应用于手机中能够帮助我们实现许多需求。
比如今天为大家介绍的Android保存数据,就是其中一个比较重要的操作技巧。Android组件相关概念总结Android传值方法细讲Android横竖屏切换正确实现方式分享Android开发环境相关配置概览Android NDK具体作用讲解对于我们所熟悉的大部分软件都有一个比较典型的特点,应用现有的数据根据不同的需求来得到相应的结果。
例如,我们最常用的Officeword、Excel、PowerPoint等办公软件,它们都是帮助我们完成某种特定的需求,同时由其所产生的数据或者文档又可以被其它软件所读取和做进一步的优化等等,在这个层面上可以看成是这些软件通过相同的文件标准来共享数据。但是对于Android最大的不同点在于,其平台上的应用软件所存储的数据或者文件是私有,仅仅可以通过它自身才可以访问其所包含的数据资源。
那么基于这样的限制,该如何在Android平台上实现不同程序间的数据共享呢?答案非常简单 – 应用ContentProviders,这是建立在Android平台上用于定义统一的数据标准。Android提供了针对不同数据类型的ContentProviders来满足各种需要。
例如:Image、Audio、Video和通讯录信息类等。阅读下边的文档之前,最好先熟悉Content Providers的概念。
有了上边所提到Content Providers,接下来就要处理在共享文件过程中的存储环节了,这里有四种方法分别适用于不同情况的需求。它们都各自有相应的优缺点,所以当开发者决定选择应用哪种方法之前,先要考虑当前所操作的情况是否适合于所选择的方法。
Preferences Files Databases Network 接下来将依次介绍上诉四个Android保存数据方法:Preferences从其保存数据的结构来分析,这是一个相对较轻量级的存储数据的方法。类似于我们常用的ini文件保存软件初始化设置,同样在Android平台常用于存储较简单的参数设置。
例如,可以通过它保存上一次用户所作的修改或者自定义参数设定,当再次启动程序后依然保持原有的设置。通过Context.getSharedPreferences()方法来读写数值,这个方法通过设置name来使得同一个程序内的其它模块共享数据。
如果不需要与其它模块共享数据,可以使用Activity.getPreferences()方法保持数据私有。需要着重强调一点,无法直接在多个程序间共享Preferences数据(不包括使用Content Providers)。
通过一个实例来了解实际使用方法:import android.app.Activity; import android.content.SharedPreferences; public class Calc extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; . . . . Override protected void onCreate(Bundle state){ super.onCreate(state); . . . . // Restore preferences SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); // Save user preferences. We need an Editor object to // make changes. All objects are from android.context.Context SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); // Don't forget to commit your edits!!! editor.commit(); } } Files从这是第二种方法,可以在设备本身的存储设备或者外接的存储设备中创建用于保存数据的文件。同样在默认的状态下,文件是不能在不同的程序间共享。
写文件:调用Context.openFileOutput()方法根据指定的路径和文件名来创建文件,这个方法会返回一个FileOutputStream对象。读取文件:调用Context.openFileInput()方法通过制定的路径和文件名来返回一个标准的Java FileInputStream对象。
(注意:在其它程序中将无法应用相同的路径和文件名来操作文件)另外编译程序之前,在res/raw/tempFile中建立一个static文件,这样可以在程序中通过Resources.openRawResource (R.raw.myDataFile)。
3.Android开发之如何读写文件
【转】 首先介绍如何存储数据,显然,要将数据从应用中输出到文件中,必须得到一个输出流outPutStream,然后往输出流中写入数据,在这里Android自带了一个得到应用输出流的方法 FileOutputStream fos =context.openFileOutput(“yuchao.txt”,Context.MODE_PRIVATE); (1) 其中第一个属性为文件名,第二个属性为读写模式(有关读写模式的说明下面将详细阐述), 然后在文件输出流fos中便可以写入数据 Fos.write(“Hi,”I'm Chao Yu!”.getBytes()); 用完文件输出流之后记得关闭 fos.close(); 这样,在/data/data/packageName/file目录下就生成了一个文件名为yuchao.txt的文件,文件中的内容为” Hi,I'm Chao Yu!” 有关(1)中读写模式其实就是制定创建文件的权限以及在读写的时候的方式,Android中提供了以下几种读写模式 Context.MODE_PRIVATE = 0 该模式下创建的文件其他应用无权访问,并且本应用将覆盖原有的内容 Context.MODE_APPEND = 32768 该模式下创建的文件其他应用无权访问,并且本应用将在原有的内容后面追加内容 Context.MODE_WORLD_READABLE = 1 该模式下创建的文件其他应用有读的权限 Context.MODE_WORLD_WRITEABLE = 2 该模式下创建的文件其他应用有写的权限 如果需要将文件设置为外部应用可以读写,可将读写模式设置为Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE 一般情况下,各个应用维护的数据都在一个特定的文件夹中,即上面所提到的/data/data/packageName/file(存在于手机存储中),但手机内存毕竟有限,所以有些情况下,我们需要往SD卡中写入数据文件,这其实和普通的java web 应用步骤一样,都是先创建特针对特定目录特定文件的输出流,然后往输出流中写数据,这里要注意一个方法,就是获取SD卡根目录的方法,随着Android系统不断升级,SD卡的根目录随时都有可能改变,Android中得到SD卡根目录的方法是 File sdCardDir = Environment.getExternalStorageDirectory(); 然后就可以进行下面的步骤 File saveFile = new File(sdCardDir, “yuchao.txt”); FileOutputStream outStream = new FileOutputStream(saveFile); outStream.write("Hi,I'm ChaoYu".getBytes()); outStream.close(); 值得注意的是,在往SD卡中写数据的时候,健壮的代码必须考虑SD卡不存在或者写保护的情况,故在写入之前,先做判断 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ …… } 接着,我们来学习下我们的应用程序如何读取文件中的数据,其实就是写的逆向过程 若要读取应用程序默认维护的文件(即/data/data/packageName/file目录下的文件),首先得到文件输入流 FileInputStream istream = this.context.openFileInput(“yuchao.txt”); 然后在内存中开辟一段缓冲区 byte[] buffer = new byte[1024]; 然后创建一个字节数组输出流 ByteArrayOutputStream ostream = new ByteArrayOutputStream(); 读出来的数据首先放入缓冲区,满了之后再写到字符输出流中 while((len=istream.read(buffer))!=-1){ ostream.write(buffer, 0, len); } 最后关闭输入流和输出流 istream.close(); ostream.close(); 将得到的内容以字符串的形式返回便得到了文件中的内容了,这里的流操作较多,故以一张图片来说明,见图1 return new String(ostream.toByteArray()); 从SD卡中读取数据与上述两个步骤类似,故不再赘述,留给读者自己思考 如在开发过程中进行SD卡地读写,切忌忘了加入权限
4.android 怎样写资源文件
1.在代码中使用资源文件 在代码中访问资源文件,是通过R类中定义的资源文件类型和资源文件名称来访问的。 具体格式为: R.资源文件类型.资源文件名称 另外,除了访问用户自定义的资源文件,还可以访问系统中的资源文件。 访问系统中的资源文件的格式为: android.R. 资源文件类型.资源文件名称2.在其他资源文件中引用资源文件 经常会在布局文件中引用图片、颜色资源、字符串资源和尺寸资源。 在其他资源中引用资源的一般格式是: @[包名称:]资源类型/资源名称使用颜色资源 颜色值定义的开始时一个#号,后面是Alpha-RGB的格式。 例如: #RGB #ARGB #RRGGBB #AARRGGBB 引用资源格式: Java代码中:R.color.color_name XML文件中:@[package:]color/color_name 使用时在res\values\目录下,定义一个colors.xml文件,里面存放颜色名字和颜色值的键值对。 如:#f00#0000ff其他资源如字符串、尺寸都是类似的方法。使用字符串资源 创建字符串资源文件strings.xml.里面内容也是键值对 在Java代码中引用字符串资源R.string.string_name 可如下取得: String str = getString(R.string.string_name).toString(); 在xml文件中引用字符串资源:@[package:]string/string_name使用尺寸资源 尺寸资源被定义在res\values\dimens.xml文件中。 相对屏幕物理密度的抽象单位
sp和精度无关的像素和dp类似,与刻度无关的像素,主要处理字体大小 引用尺寸资源: 在Java代码中: R.dimen.dimen_name 在xml文件中:@[package:]dimen/dimen_name使用原始XML资源 XML文件定义在工程的res\xml\目录下,通过Resources.getXML()方法来访问。 获得原始XML文件的思路是,通过getResources().getXml()获得XML原始文件,得到XmlResourceParser对象,通过该对象来判断是文档的开始还是结尾、是某个标签的开始还是结尾,并通过一些获得属性的方法来遍历XML文件,从而访问XML文件的内容。使用drawables资源 drawable资源是一些图片或者颜色资源,主要用来绘制屏幕,通过Resources.getDrawable()方法获得。 drawable资源分为三类:Bitmap File(位图文件)、Color Drawable(颜色)、Nine-Patch Image(九片图片)。 Android中支持的位图文件有png、jpg和gif。 引用位图资源的格式: Java代码中:R.drawable.file_name XML文件中:@[package:]drawable/file_name使用布局(layout)资源 布局资源是Android中最常用的一种资源,将屏幕中组件的布局方式定义在一个XML文件中,类似于Web中的HTML页面。 布局文件位于res\layout\中,名称任意。Android通过LayoutInflater类将XML文件中的组件解析为可视化的视图组件。 在Activity中,调用Activity.setContentView()方法,将布局文件设置为Activity的界面,使用findViewById()方法来得到布局中的组件。
5.求问,android如何写到文件
今天刚写了这个工具类,贴给你,很简单的,就是用输出流写进缓冲字节数组,然后保存进文件,至于文件的格式就自己随便写了,自己去优化和扩展吧。
public class FileStoreTools {/** * * TODO:保存文件 根目录 Author:Andy.Liu Create Time:2012-7-10 上午08:54:14 TAG:@return * Return:String */ public static String getSDPath() { boolean hasSDCard = Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED); if (hasSDCard) { return Environment.getExternalStorageDirectory().toString(); } else return Environment.getDownloadCacheDirectory().toString(); }/** * * TODO:保存文件 */ public static void saveFile(String textString, String filePath,String fileName) { FileOutputStream fos = null; try { File file = new File(filePath); if (!file.exists()) file.mkdirs(); file = new File(filePath+fileName); fos = new FileOutputStream(file); fos.write(textString.getBytes()); fos.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (null != fos) fos.close(); } catch (IOException e) { e.printStackTrace(); } } }/** * * TODO:读取文件 Author:Andy.Liu Create Time:2012-7-10 上午08:48:40 TAG:@param * filePath TAG:@return Return:String */ public static String readFile(String filePath) { FileInputStream fis = null; byte[] mByte = new byte[512]; try { fis = new FileInputStream(new File(filePath)); fis.read(mByte); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (null != fis) fis.close(); } catch (IOException e) { e.printStackTrace(); } } return new String(mByte).toString(); }}。
6.android开发,如何写配置文件
如果需要修改xml文件可以使用SAX或DOM的方法读取需要修改的xml文件,然后利用相应的接口修改后保存即可,不过不推荐使用这种方法,原因为按照Android的设计理念在工程res目录下存放的应该都是不可变的单独资源。根据您的需求可以用这样的方法实现:1.在strings.xml中把可能会变更的值全部定义。2.在需要变更时在程序代码中重新进行设置,如setText等,这种方法属于常规方法,设置后立即生效不需要重新启动程序。如果不想使用这种方法而是想用配置文件的方法可以考虑使用sharedpreferences来保存/读取相应的配置,然后同样使用setText等方法将配置应用到程序中,sharedpreferences会将配置以xml的形式保存在/data/data/<package name>/shares_prefs目录下。
希望对你有帮助。
7.android 下怎么读写大文件
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.File;
import java.io.BufferedInputStream;
import java.io.InputStream;
public class ReadAndWriteBinaryFileExample3 {
public static void main(String[] args) throws IOException {
//find the file size
File fileHandle = new File("test.jpg");
long length = fileHandle.length();
try (
//Open the input and out files for the streams
InputStream fileInputStream = new BufferedInputStream(new FileInputStream("test.jpg"));
FileOutputStream fileOutputStream = new FileOutputStream("test_copy.jpg");
)
{
int data;
//Read data into buffer and then write to the output file
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1)
{
fileOutputStream.write(buffer, 0, bytesRead);
}
}//try-with-resource
}
}你是说假如有袋大米50斤 现在一x个成年人习可以直接挪动 这时叫一一个小孩 他可能一次挪不动 小孩可以拿个铲子 一小点慢慢过去 中间建个buffer 啊
脚本怎么写代码
1. 什么叫脚本,干嘛用的,哪里用到啊,要自己编写代码还是系统自己生
feiwangwangfei你好!
简单点说,脚本就是简单的语言程序。脚本类别很多,最普通的有系统的脚本程序,网页的脚本程序,就连word文档也可以编写脚本。这些脚本主要是实现一些简单的功能。就拿windos脚本来说吧,比如我想实现定时关机可以用txt写个shutdown -s -t 60 然后保存为bat文件。那么这个bat文件就是个脚本了。每次运行它系统就会在1分钟后关机。
显然脚本是人为实现的。系统当然可以生成脚本,但归根到底那也是人为地要求系统在特定的时刻生成某个特定功能的脚本。
如果你对编程或者系统的命令提示符不了解的话,我这么说你可能也不明白。如果你真想去了解它建议你认真看点关于脚本方面的书。毕竟这脚本语言还是挺实用的!
以上纯属个人意见,希望对你有所帮助^_^!
2. 运行脚本代码
朋友你好
其实你的指令很简单
在坐标点523,600无限循环点击
点击间隔时间为1秒
添加个标记点即可达到无限循环
至于点击间隔就得看你机子吃不吃得消
我给你做个自定义变量
点击间隔可以自己设置
//以下是按键精灵脚本内容
UserVar ys=1 鼠标单击间隔单位(毫秒)
Rem 返回
MoveTo 523,600
Delay ys
LeftClick 1
Goto 返回
//做成小精灵后,如果点击间隔1毫秒吃不消的话就改慢些.一般10毫秒算是很快的了
3. 脚本代码指的是什么程序语言编写的
一、啥叫脚本呢? 其实就是一段代码,作用就是:这些代码通过你的浏览器来鼓捣一下你的机器。
这样,你就能通过点一下鼠标就可以发点欢迎词、发点情话啥地了。 二、怎么在聊天室放脚本呢? 把这段代码放你右下角链接里就可以了。
三、你浏览器咋会知道你放脚本了呢? 因为每段脚本务都放在之间了。一见到<script>字样,浏览器就会当成脚本来分析了。
纯属浏览器的条件反射之一。 四、我从寒江脚本里学到啥了? 1、定义一个变量: var a=1 的意思就是:定义一个变量a,并给a赋值为1 2、为啥要定义变量呢? 这话说的,干活不用人哪行啊?其实定义变量就是事先找几个人来,留着以后派给任务。
3、定义一个数组变量 var a_name_filter = new Array(。
); 其实数组变量也是相当于找人,只不过这个人可以干好几样活而已(属于能人类型的)。
4、定义功能函数 function a(){} 这相当于各项任务。事先定义的变量一般会在这里体现出来。
当你在脚本里写上a()之后,浏览器就会条件反射了(执行a功能函数中的语句)。 五、脚本的说明文字 啥东西都得有个说明书不是,脚本也得有呀,而且这个说明书最好要写在代码里(要不过后自己都看不明白了,多丢人啊。)
那么怎么写说明呢? 1、某行代码的说明可以放在此行代码的最后面,在行尾打上//然后再写入文字说明就可以了。 例如: var room_name="悠悠柠檬情"; //聊天室名字 2、如果文字太多,一行写不下那咋办啊? 在此特殊说明一下,其实尽管代码一般都是英文字符,但说明文字绝对可以兼容现代汉语以及文言文的,(←废话) 如果是多行说明文字,可以这样写 //--------------------------------------------- //孤鹤脚本0.9999版just for my Love // //失去,也是一种笃定。
// //就算拥有的时光,是那麽短暂; // //能够无怨无悔地为一个人付出,就是幸福。 //--------------------------------------------- 看着感觉还不错吧?(^!-) 当然,还有更方便的写法,就是在说明文字的第一行写上/*,再在最后一行写上*/。
例子如下: /* 孤鹤脚本0.9999版 just for my Love 小薇啊,你可知道我多爱你, 我要带你飞到天上去 看那星星多么美丽 摘下一颗,轻轻送给你。
*/ 本人强烈建议,不要在脚本里写歌词,因为有可能导致看脚本人的情感波动。
:-) 六、数据类型 数据类型包括:字符串、数值、布尔三种类型。 javascript带有数据类型强制转换功能,这对编写者(尤其是对喝完酒写代码的人)来讲是一个大大的好事。
要不你还得记好多的数据转换函数。 七、JScript的运算符 关于运算符的讲解,将会涉及很多很多的知识,请小学没有毕业的同志自学完成小学课程之后再看。
计算 符号 位运算 符号 ------------------------------------- 负值 - 逻辑非 ! 递增 ++ 小于 < 递减 -- 大于 > 乘法 * 小于等于 <= 除法 / 大于等于 >= 加法 + 等于 == 加法 + 不等于 != 减法 - 逻辑与 && 等于 = 例一: x=1+2 ======= 答案:x被赋值为3 例二: if (mylove=="小薇") { document.write("回答正确,您属于多愁善感型的") } else { document.write("回答错误!您属于没事找抽型的") } ====== 运行结果: 如果变量mylove的值为“小薇”,那么,程序会执行document.write("回答正确,您属于多愁善感型的") 否则,则执行document.write("回答错误!您属于没事找抽型的") 我学到的脚本知识(二) 今夜,让我静静地想你(诗配JS语句篇) 今夜,我怅坐一隅静静地想你, 想知道你在做什么,想知道你有没有在想我; 一、if。else 语句[根据表达式的值,有条件地执行一组语句。
] 我想你,你想我吗?如果我不想你,那么你还想我吗? 用语句控制如下: if 我想你 {你想我吗?} else{那么你还想我吗?} 通常都先定义一个变量来做为判断条件。 a='我想你'; if (a=='我想你') { b='你想我吗?'} else { b='那么你还想我吗?' } 二、do。
while 语句[第一次执行一个语句块,然后重复循环的执行该语句块,直到条件表达式等于 false。] 折九百九十九只纸鹤我就会去睡的, 用语句控制如下: i=1; do (折一只纸鹤;) i=i++; while(i<999) 三、switch 语句[当指定的表达式的值与某个标签匹配时,即执行相应的一个或多个语句。
] 我想你, (假设前面已经为a赋值) switch(a){ case 想为你点亮一盏桔色的灯,: 静静守候着你疲惫的归来; case 想为你递上一杯温热的香茗,: 缓缓驱散你脸上的倦容; case 想用我温柔纤细的手指,: 轻轻抚平你眼角的皱纹; case 想用我轻柔温情的呢喃,: 抚慰你驿动不安的心灵。; } 然后静静地看着你…… 我祈求,祈求这一刻的宁静、永恒。
四、for 语句[只要指定条件为 true 都执行语句块。] (第二条语句也可以用FOR语句来表达) 用语句控制如下: for (i = 1; i < 999; i++) { (折一只纸鹤;) } 五、while 语句[执行一个语句,直到指定的条件为 false。
] (第二条语句也可以用while语句来表达) 折九百九十九只纸鹤我就会去睡的, 用语句控制如下: var i=1; while (i < 999) { (折一只纸鹤;) i++; } 我学到的脚本知识(三) 前二篇,已经把脚本的基本知识粗略地介绍了一下,基础知识也介绍得差不。
4. 求大神写一个按键精灵脚本代码
按键精灵的鼠标动作录制是一项非常好用的功能,但因为鼠标点击的地方是固定死板的,且延迟时间无法调整,如果在后台脚本中添加一些专用代码,就可以调整点击频率和点击时间,甚至可以在安卓模拟器上使用模拟按压式点击,当然,这只是冰山一角,创造脚本为专业连续作业做准备才好玩呢!

按键精灵脚本代码大全:
小技巧:按Ctrl+F,输入命令,即可进行查找定位:
按键精灵命令使用方法:
键盘命令分为两大类:键盘模拟命令和键盘控制命令.键盘模拟命令可以模拟我们日常操作键盘的行为.操作键盘的动作分为三类:按下、弹起、按下并弹起.键盘控制命令可以在脚本执行过程中通过键盘控制脚本行为.
[KeyPress、KeyPressS、KeyPressH]
格式: KeyPress {键盘虚拟码},{次数}
解释: 先"按下"再"弹起"键,模拟我们平时的"按键"操作
5. 脚本是什么
脚本:写剧本的人,也叫故事构成。
脚本英文为Script。实际上脚本就是程序,一般都是有应用程序提供的编程语言。应用程序包括浏览器(JavaScript、VBScript)、多媒体创作工具,应用程序的宏和创作系统的批处理语言也可以归入脚本之类。脚本同我们平时使用的VB、C语言的区别主要是:
1、脚本语法比较简单,比较容易掌握;
2、脚本与应用程序密切相关,所以包括相对应用程序自身的功能;
3、脚本一般不具备通用性,所能处理的问题范围有限。
脚本,英文名为Script,简单地说,脚本就是指通过记事本程序或其它文本编辑器(如Windows Script Editor,EditPlus等)创建,并保存为特定扩展名(如.reg , .vbs, .js, .inf等)的文件,对于注册表脚本文件就是利用特定的格式编辑的.reg文件;对于VBScript脚本编程语言来说,脚本文件扩展名就是.vbs;对于JScript脚本编程语言来说,脚本文件扩展名就是.js;另外,.wsf格式是Microsoft定义的一种脚本文件格式,即Window Script File.
具体地说,脚本通过利用应用程序或工具的规则和语法来表达指令,以控制应用程序(包括注册表程序)中各种元素的反应,也可以由简单的控制结构(例如循环语句和If/Then语句)组成,这些应用程序或工具包括网页浏览器(支持VBScript,Jscript),多媒体制作工具,应用程序的宏(比如Office的宏)以及我们熟悉的注册表工具(regedit.exe)等.操作系统中的批处理也可以归入脚本之列,批处理程序也经常由Windows环境中的"脚本"替换,所以又称脚本是"Windows时代的批处理".
脚本的作用在每一种应用程序中起的作用都是不一样的,比如在网页中可以实现各种动态效果,各种特效处理,实现各种HTML不能实现的功能.而在Office组件中,我们会经常看到"宏"这个工具,它其实就是一系列命令和指令可以实现任务执行的自动化.
脚本多以“vbs”、“bat”结尾。可以用“记事本”或“按键精灵”编辑。
6. 按键精灵知道代码,怎么写成脚本
打开按键精灵,切换到源文件模式,把代码直接粘贴就好了.然后点击上面发布。
生成小精灵就OK了。但这只能是没有附件,没有界面,没有插件的源码可以。
如果有界面,你需要按照代码,画出界面来。
然后将附件添加进去。如果有其他支持库,你必须要有支持库文件,放在按键精灵plugin目录下,如:Q语言大学按键精灵支持库.dll。
至于如何判断代码是不是包含这些,只需要点击调试。如直接通过,则可以直接发布成EXE小精灵。
如果无法通过,可以在下方调试的脚本信息,查看需要一些什么专业作者回答,请采纳。如有以问,请追问。
7. javascript脚本应该写在代码的什么地方
1.HEAD中的脚本,是可以保证脚本在任何调用之前被加载。
2.BODY中的脚本,当页面被加载时执行的脚本放在HTML的body部分。放在body部分的脚本通常被用来生成页面的内容。
3.Javascript可以放在页面的任何地方,它的加载顺序与页面的加载顺序一致,页面加载时,先加载head部分,后加载body部分,所以当把javascript代码块放在HTML前面时,它将先于head被加载,当放在head里面时,它将先于body被加载,当放在页面最后的的html之外时,它将最后被加载。
flash怎么写代码
1. flash动作代码怎么写的,说的越详细越好
Flash按钮动作代码 --------------------------------------------------------------------------------代码1 影片剪辑mc是放在第二个场景中on (press) { _parent.mc.gotoAndStop("场景 2",2); _parent.gotoAndStop("场景 2",2); } 写("场景 2",2); 提示错误的话,就写("scene 2",2); 也就是一个英文一个中文,看用的是什么版本的FLASH _root表示的是当前主场景,表示绝对路径的时候经常用它 _parent是表示父时间轴, this是表示当前元件,表示相对路径的时候经常用 还有技巧就是,场景多的时候一半很少用_root!Flash按钮动作代码 1、转下一帧并继续播放on (release){ play();}2、转第三帧并播放on (release){ gotoAndPlay(03); stopAllSounds();}3、全屏播放fscommand("fullscreen", "true");4、退出on (release){ if (substring(_root._url, 8, 1) == "/") { fscommand("quit"); } else { getURL("javascript:window.close()"); } // end if}5、返回第一帧on (release){ gotoAndPlay(01); stopAllSounds();}FLASH脚本代码大全 - Go to 跳转到指定的帧 - Play 播放 - Stop 停止 - Toggle High Quality 在高画质和低画质间切换 - Stop All Sounds 停止所有声音的播放 - Get URL 跳转至某个超联结 - FSCommand 发送FSCommand命令 - Load Movie 装载影片 - Unload Movie 卸载影片 - Tell Target 告知目标 - If Frame Is Loaded ..判断帧是否被完全载入 - On Mouse Event 鼠标事件。
其他Actions。包括:- break 跳出循环 - call 调用指定帧(一般喊有某个特定函数) - comment 注释 - continue 继续循环 - delete 删除一个对象(Object)中的变量 - do while do while循环 - duplicateMovieClip 复制MC - else 否则(与if联用) - else if 否则如果(与if联用) - evaluate 调用自定义函数(Function) - for for循环 - for .. in 依次取得对象(Object)中的各个属性或者某个数组中的所有元素 - FSCommand 发送FSCommand命令 - function 声明自定义函数 - getURL 跳转至某个超联结 - goto 跳转到指定的帧 - if 如果 - ifFrameLoaded ..帧是否完全被载入 - include 读入外部的ActionScript程序文件(.as) - loadMovie 装载MC - loadVariables 转载外部文件中的数据,这些外部文件可以是文本文件,或者是由ASP/CGI等脚本返回的文本值 - on 鼠标事件的触发条件 - onClipEvent MC的事件触发程序 - play 播放 - print 输出到打印机 - removeMovieClip 删除MC - return 在函数(function)中返回一个值 - set variable 设定变量值 - setProperty 设定属性 - startDrag 开始拖动 - stop 停止 - stopAllSounds 停止所有声音的播放 - stopDrag 停止拖动 - swapDepths 交换两个MC的深度 - tellTarget 指定Action命令生效的目标 - toggleHighQuality 在高画质和低画质间切换 - trace 跟踪调试 - unloadMovie 卸载MC - var 声明局部变量 - while 当..成立时.. - with 对..对象(Object)做..。
操作符( Operators) - ! 逻辑非操作 - != 不等于 - "" 字符串 - % 取余数 - && 逻辑与操作 - () 括号 - * 乘号 - + 加号 - ++ 变量自加一 - - 减号 - -- 变量自减一 - / 除号 - < 小于 - <= 小于等于 - <> 不等于 - == 相等 - > 大于 - >= 大于等于 - and 逻辑与 - not 逻辑非 - or 逻辑或 - typeof 返回变量类型 - void 实体,无返回 - | | 逻辑或操作 + Bitwise Operators 位操作符 - & 位与操作 - << 位左移 - >> 位右移 - >>> 位右移(无符号) - ^ 位异或操作 - | 位或操作 - ~ 补位操作 + Compound Assign Operators 复合操作符 - %= A%=B 等效于 A=A%B - &= A&=B 等效于 A=A&B - *= A*=B 等效于 A=A*B - += A+=B 等效于 A=A+B - -= A-=B 等效于 A=A-B - /= A/=B 等效于 A=A/B - <<= A<<=B 等效于 A=A<>= A>>=B 等效于 A=A>>B - >>>= A>>>=B 等效于 A=A>>>B - ^= A^=B 等效于 A=A^B - |= A|=B 等效于 A=A|B + String Operators 字符串操作符(注:实质上是ASCII的比较) - add 连接两个字符串 - eq A eq B 字符串A值与字符串值B相等 - ge A ge B 字符串A值大于等于字符串B值 - gt A gt B 字符串A值大于字符串B值 - le A le B 字符串A值小于等于字符串B值 - lt A lt B 字符串A值小于字符串B值 - ne A ne B 字符串A值不等于字符串B值 + Functions 函数 - Boolean 取表达式的布尔值(True 或 False) - escape 除去URL串中的非法字符,将其参数按照URL编码的格式转化为字符串(String) - eval 访问并计算表达式(expression)的值,并以字符串(String)的形式返回该值 - false 布尔非值(0) - getProperty 获取属性 - getTimer 获取从电影开始播放到现在的总播放时间(毫秒数) - getVersion 获取浏览器的FLASHPlayer的版本号 - globalToLocal 场景(Scene)中的坐标转换成MC中的坐标 - hitTest 测试一个点或者MC是否同另一个交叉(即冲突检测) - int 把十进制数值强制转换成整数 - isFinite 测试数值是否为有限数 - isNaN 测试是否为非数值 - keycode 返回键盘按下键的键盘值(ASCII值) - localToGlobal MC中的坐标转换成场景(Scene)中的坐标 - maxscroll 文本框的最大行度 - newline 换行符 L给服务器。
一个的个怎么写代码
1. 求助 问一个简单代码怎么写
<html>
<script language='javascript'>
function add()
{
if(document.all.a.value == "")
{
document.all.c.value = 0 + parseInt(document.all.b.value);
}
if(document.all.b.value == "")
{
document.all.c.value = parseInt(document.all.a.value) + 0;
}
else
{
document.all.c.value = parseInt(document.all.a.value) + parseInt(document.all.b.value);
}
}
</script>
<body>
<input type='text' id='a' onchange='add();'/>
<input type='text' id='b' onchange='add();'/>
<input type='text' id='c'/>
</body>
</html>
------------------------
这是最简单的,没有对输入非数字做判断
2. 写一个简短的C语言代码
#include <stdio.h>
int main()
{
权double a,b,c;
scanf("%lf",&a);
scanf("%lf",&b);
c=a+b;
printf("first number:%.2lf",a);
printf("\nsecond number%.2lf",b);
printf("\n\t%.2lf",a);
printf("\n+\t%.2lf",b);
printf("\n-------------\n");
printf(" %.2lf\n",c);
return 0;
}
3. 帮写一个简单程序的代码
Private Sub Command1_Click()
Dim b As Integer
Dim i As Integer
Dim max As String
Dim temp As String
b=Len(Text1.Text)
For i=1 To b
If Mid$(Text1.Text,i,1)=Chr(32) Then
If Len(temp)>Len(max) Then max=temp
temp=""
Else
temp=temp & Mid$(Text1.Text,i,1)
End If
Next i
If Len(temp)>Len(max) Then max=temp
MsgBox "最长的单词为:" & max
End Sub
4. 怎么写这个一段代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
<html xmlns="
<meta ; charset=gb2312">
<meta >
5. 怎样写一个输出自己源代码的程序
要写一个可移植的自再生的程序是件很困难的事, 部分原因是因为引用和字符集的难度。
这里是个经典的例子 (应该以一行表示的, 虽然第一次执行后它后自修复):
char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";
main(){printf(s,34,s,34);}
这段程序有一些依赖, 忽略了 #include <stdio.h>;, 还假设了双引号 " 的值为34, 和 ASCII 中的值一样。
这里还有一个有 James Hu 发布的改进版:
#define q(k)main(){return!puts(#k"\nq("#k")");}
q(#define q(k)main(){return!puts(#k"\nq("#k")");})
怎么写c代码
1. c语言的编程怎么写
第一题有递推要快一些,因为你算N!时还要算(N-1)!,而(N-1)!在前面已经算过了,多算了一次
一般的int也就能表示2^16次方,一般的long也就能表示2^32次方,一般的long long也就能表示2^64次方,如果不涉及到大数运算,可以用下面的
#include"stdio.h"
main()
{
int a[15],i;
a[0]=1;a[1]=2;
for(i=2;i<15;i++)
{
a[i]=a[i-1]*(i+1);
}
int n,b;
printf("Input n:");
scanf("%d",&n);
b=a[n-1];//下标从0开始的
printf("n!=%d\n",b);
}
第二题
#include<stdio.h>
main()
{
char ch;
int n,s=0;
printf("你想输入几个字符\n");
scanf("%d",&n);
while(n--)
{
ch=getchar();
s=s*10+(ch-'0');
}
printf("%d\n",s);
}
2. 求C语言代码怎么写.
根据题意可得如下代码:
#include
#include
#include
int randA()//个位
{
int a = rand()%10;
while (a==2||a==4||a==6){
a = rand()%10;
}
return a;
}
int randD()//十位
{
int a = rand()%10;
while(a==1||a==3||a==9){
a = rand()%10;
}
return a;
}
int randH()//百位
{
int a = rand()%10;
while (a==3||a==5||a==7){
a = rand()%10;
}
return a;
}
int randANum()
{
return (randH()*100+randD()*10+randA());
}
int main()
{
int a[250], i = 0, j;
srand((unsigned int)time(NULL));
while (true){
a[i] = randANum();
for (j = 0; j = i)i++;
if (i == 250)break;
}
for (j = 0; j
3. C语言这个代码怎么写
#include
4. 最牛B的C语言写法
//那非“混乱C代码大赛”冠军莫属,这是我珍藏的代码~~~~~~
//作用是打印一首歌歌词
#include <stdio.h>
main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?
main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,
"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#\
;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l \
q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# \
){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' \
iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# \
}'+}##(!!/")
:t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1)
:0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}
5. 用C语言怎样编写一句话
工具/原料
VC++6.0 电脑
方法/步骤
1、首先,打开编译器,新建文件。出现的空白处是写代码的。
2、输入”#include<stdio.h>;“这个为头文件。
3、第二行,输入”main“,加上一对”小括号“。
4、在main,下方,输入一对大括号 {}。
5、在大括号里输入,”printf("Hello,Word\n");”。
6、运行程序即可看到输入的话了。
6. C语言这个怎么写
#include
+(b-1)+(b)\n"); printf("=%d+%d+%d+。
+%d+%d\n",a,a+1,a+2,b-1,b); sum=0; for ( i=a;i<=b;i++ ) sum+=i; printf("=%d\n",sum); system("pause"); } 。
7. 这个用c语言怎么写
int i,j,num_ch;char tmp;scanf("%c",&tmp);num_ch = ((tmp - 'A')>=0)?(tmp-'A'):(tmp-'a');for(i=0;i
8. 用C语言怎么写程序
#include <stdio.h>
void main()
{
float input;
float a = 2.205;
do{
printf("input a no.: ");
scanf("%f",&input);
printf("ouput is: %.2f\n",input * a);
}while (input != 0);
}
转载请注明出处育才学习网 » androidstudio怎么写代码
育才学习网