Android如何:传递和存储用户输入并将其返回到主类(MainActivity)

时间:2017-03-05 17:46:13

标签: android c java-native-interface

我是android开发新手,     我希望通过 EditText 获取用户输入,将其存储为String。通过 JNI 将该字符串传递给 c 。当我按下一个按钮时,该字符串应该显示在 TextView 上,显示键入的内容和字符串的长度。 在android中:

public class MainActivity extends AppCompatActivity {
static {
    System.loadLibrary("native-lib");
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button b1 = (Button) findViewById(R.id.bb1);
    b1.setOnClickListener(
         new Button.OnClickListener(){
             public void onClick(View v){
                 TextView tv = (TextView) findViewById(R.id.sample_text);
                 EditText e1 = (EditText) findViewById(R.id.ee1);
                 TextView t2 = (TextView) findViewById(R.id.test1);
                 String str =e1.getText().toString();
                 tv.setText(HelloWorld(str)); // This should text
                 t2.setText("This should show length"HelloWorld(l)); //This should show length
             }
         }
    );
}
public native String HelloWorld(String stri);`

并在c文件中:

`#include "HelloWorld.h"
 #include <jni.h>
 #include <string.h>

JNIEXPORT jstring JNICALL
Java_com_example_james_myapplication_MainActivity_HelloWorld(JNIEnv *env,jobject jobj,jstring jstring1,jint l /* this */) {

const char *str = (*env) ->GetStringUTFChars(env,jstring1,NULL);

return (*env) ->NewStringUTF(env,str);}`

我无法显示输入的长度(我得到错误'无法解析符号l'。我不确定我是否正在执行此代码,我的意思是将输入传递给c 请帮忙!提前谢谢。

1 个答案:

答案 0 :(得分:0)

HelloWorld(l)无法获得字符串的长度。我不确定你为什么会这么想。要获取字符串的长度,请调用variablename.length()。所以这就是

String result = HelloWorld(str);             
tv.setText(result); // This should text
t2.setText("This should show length" + result.length()); //This should show length