# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
android.useDeprecatedNdk=true//添加这一行
4.jni类:
package com.example.lxb.ndk_1.ndk;
/**
* Created by lxb on 2017/3/21.
*/
public class HelloJni {
static {
System.loadLibrary("testjni");
}
public static native String getJniString();
public native int operateArray(int[] a, int[] b);
public native static String strConcat(String str1, String str2);
public native int[] getIntArray(int size);
public native void sortIntArray(int[] ints);
public native void accessJavaMethod();
/**
* 实例方法,在C++中调用
*
* @return
*/
public String InstanceMethod() {
return "JNI中通过方法id来调用java中的实例方法";
}
/**
* 静态方法,在C++中调用
*
* java返回信息,在jni层打印出来
* @return
*/
public static String staticMethod() {
return "JNI中通过方法id来调用静态方法";
}
/**
* jni层传入信息,在java层打印出来
* @param info
*/
public static void printInfo(String info){
System.out.println("51------------copy info from jni is: "+info);
}
/**
* C++中测试调用带参数的方法
*
* @param info
* @return
*/
public String paramMethod(String info) {
return info;
}
/**
* c++能过原生方法调用带有多个不同类型的参数方法
*
* @param a
* @param str
* @param array
* @return
*/
public String MuitleParamMethod(int a, String str, int[] array) {
int total = 0;
for (int i = 0; i < array.length; i++) {
total += array[i];
}
String result = a + str + total;
return result;
}
public native void callJavaObjMethod();
//public native void callJavaObjField();
public native void callJavaObjField(TestObj obj);
}
5.测试用的java类:
package com.example.lxb.ndk_1.ndk;
/**
* Created by lxb on 2017/3/22.
*/
public class TestObj {
public String name ;
private int age;
public static int num = 21;
public int sex;
public TestObj(){
this.name = "liuhulai";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
/**
* 实例方法,在C++中调用
*
* @return
*/
public String InstanceMethod() {
return "JNI中通过方法id来调用java中的实例方法";
}
/**
* 静态方法,在C++中调用
*
* java返回信息,在jni层打印出来
* @return
*/
public static String staticMethod() {
return "JNI中通过方法id来调用静态方法";
}
@Override
public String toString() {
String sTmp = "名字:" + name + "年龄:" + age;
return sTmp;
}
}
6.mainactivity:
package com.example.lxb.ndk_1;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.lxb.ndk_1.ndk.HelloJni;
import com.example.lxb.ndk_1.ndk.TestObj;
/**
* ndk-build编译方式
*/
public class MainActivity extends Activity {
HelloJni jniObj;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
jniObj = new HelloJni();
}
private void initView() {
Button jniStr = (Button) findViewById(R.id.btn_jnistr);
Button jniArray = (Button) findViewById(R.id.btn_jniarray);
Button jniString = (Button) findViewById(R.id.btn_jnistring);
Button jniReturnArray = (Button) findViewById(R.id.btn_jni_return_array);
Button jniSortArray = (Button) findViewById(R.id.btn_jniarray_sort);
Button jniAccessJavaField = (Button) findViewById(R.id.btn_jni_access_java_field);
Button jnicalljavamethod = (Button) findViewById(R.id.btn_jni_call_java_method);
Button jnicalljavaObj = (Button) findViewById(R.id.btn_jni_call_java_obj);
Button jnicalljavaObjField = (Button) findViewById(R.id.btn_jni_obj_field);
Button jnicalljavaObjMethod = (Button) findViewById(R.id.btn_jni_call_obj_medthod);
EventClick eventClick = new EventClick();
jniStr.setOnClickListener(eventClick);
jniArray.setOnClickListener(eventClick);
jniString.setOnClickListener(eventClick);
jniReturnArray.setOnClickListener(eventClick);
jniSortArray.setOnClickListener(eventClick);
jniAccessJavaField.setOnClickListener(eventClick);
jnicalljavamethod.setOnClickListener(eventClick);
jnicalljavaObj.setOnClickListener(eventClick);
jnicalljavaObjField.setOnClickListener(eventClick);
jnicalljavaObjMethod.setOnClickListener(eventClick);
}
private class EventClick implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_jnistr:
System.out.println("40------------------jnistr:" + jniObj.getJniString());
break;
case R.id.btn_jniarray:
int[] a = {1, 2, 3};
int[] b = {4, 5, 6};
System.out.println("40------------------jnistr:" + jniObj.operateArray(a, b));
break;
case R.id.btn_jnistring:
System.out.println("55-------------opertion string:" + jniObj.strConcat("liuhulai", "刘小兵"));
break;
case R.id.btn_jni_return_array:
int[] jniarray = jniObj.getIntArray(10);
System.out.println("65---------------get array from jni:");
for (int i = 0; i < jniarray.length; i++) {
System.out.print(jniarray[i] + " ");
}
break;
case R.id.btn_jniarray_sort:
int[] sort = {9,0,7,6,8,5,3,4,2,1};
jniObj.sortIntArray(sort);
System.out.println("排序后的数组为:");
for (int x:sort) {
System.out.print(" "+x);
}
break;
case R.id.btn_jni_access_java_field:
break;
case R.id.btn_jni_call_java_method:
jniObj.accessJavaMethod();
break;
case R.id.btn_jni_call_java_obj:
break;
case R.id.btn_jni_obj_field:
TestObj obj = new TestObj();
jniObj.callJavaObjField(obj);
System.out.println("114--------------jni修改java对象之后的值 为:"+obj.getName() + " : age: "+obj.getAge() + " 修改静态变量值为: "+TestObj.num);
break;
case R.id.btn_jni_call_obj_medthod:
jniObj.callJavaObjMethod();
break;
}
}
}
}
参考:http://blog.csdn.net/qingfeilee/article/details/7052736
org.hibernate.NonUniqueResultException: query did not return a unique result: 2
在项目中出现了org.hiber
由Oracle通信技术部门主导的演示项目并没有在本月较早前法国南斯举行的行业集团TM论坛大会中获得嘉奖。但是,Oracle通信官员解雇致力于打造一个支持零干预分配和编制功能的网络即服务(NaaS)平台,帮助企业以更灵活和更适合云的方式实现通信服务提供商(CSP)的连接产品。这个Oracle主导的项目属于TM Forum Live!活动上展示的Catalyst计划的19个项目之一。Catalyst计
Spring MVC提供了非常方便的文件上传功能。
1,配置Spring支持文件上传:
DispatcherServlet本身并不知道如何处理multipart的表单数据,需要一个multipart解析器把POST请求的multipart数据中抽取出来,这样DispatcherServlet就能将其传递给我们的控制器了。为了在Spring中注册multipart解析器,需要声明一个实现了Mul
the CollabNet user information center http://help.collab.net/
How do I create a new Wiki page?
A CollabNet TeamForge project can have any number of Wiki pages. All Wiki pages are linked, and
package beautyOfCoding;
import java.util.Arrays;
import java.util.Random;
public class MaxSubArraySum2 {
/**
* 编程之美 子数组之和的最大值(二维)
*/
private static final int ROW = 5;
private stat
示例程序,swap_1和swap_2都是错误的,推理从1开始推到2,2没完成,推到3就完成了
# include <stdio.h>
void swap_1(int, int);
void swap_2(int *, int *);
void swap_3(int *, int *);
int main(void)
{
int a = 3;
int b =
同步工具类包括信号量(Semaphore)、栅栏(barrier)、闭锁(CountDownLatch)
闭锁(CountDownLatch)
public class RunMain {
public long timeTasks(int nThreads, final Runnable task) throws InterruptedException {
fin
不止一次,看到很多讲技术的文章里面出现过这个词语。今天终于弄懂了——通过朋友给的浏览软件,上了wiki。
我再一次感到,没有辞典能像WiKi一样,给出这样体贴人心、一清二楚的解释了。为了表达我对WiKi的喜爱,只好在此一一中英对照,给大家上次课。
In computer science, bleeding edge is a term that