请帮助我更正此代码,以便在调用getString12时在MainActivity.java(Android studio-1.1.0,gradle-2.2.1)中返回一个字符串。我找不到错误getString12?库(.so)也会生成。任何人都可以说代码有什么问题吗?
TEST.CPP
//#include "test.h"
#include <string.h>
#include <jni.h>
/*char* getString12();
char* Java_com_example_myapplication_Application_getString12()
{ char x[80]="Hello World!!!";
char *s1 = new char [sizeof(x)];
strcpy(s1,x);
return s1;
}*/
extern "C" {
JNIEXPORT jstring JNICALL Java_com_example_myapplication_MainActivity_getString12(JNIEnv *env,
jobject obj)
{
我应该使用哪两个?评论3行或其他2行 我尝试通过备用注释执行两者并获得相同的错误
// char sk[30]="hello-world!!!";
// const char *v = (const char *)sk;
// return (*v)->NewStringUTF(env,"Hello from C++ JNI !");
jstring x="hellllooooo!!!!";
return x;
}
}
MainActivity.java
static{
System.loadLibrary("gnustl_shared");
}
public native String getString12();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView field = (TextView)findViewById(R.id.text);
String f=getString12();
field.setText(getString12());
该库是在src / libs / armeabi / libgnustl_shared.so中创建的
答案 0 :(得分:0)
首先,你确定.so正在加载吗?如果是的话,那么听起来就像你在Java期望和C ++提供的内容之间存在签名不匹配。我认为您的代码应该类似于:(未经测试)
爪哇:
s = Session()
objects = [
User(name="u1"),
User(name="u2"),
User(name="u3")
]
s.bulk_save_objects(objects)
s.commit()
C ++:
package com.example.myapplication;
public class MainActivity extends Activity {
static {
System.loadLibrary("yourlibraryname");
}
public native String getString12();
// ...
public void someFunction() {
TextView field = (TextView)findViewById(R.id.text);
field.setText(getString12());
}
// ...
}