Android NDK JNI: C++如何调用Java API传递字符串, 并将字符串显示到TextView.

4 篇文章 0 订阅
2 篇文章 0 订阅

下面是一个C++调用Java API, 并在该Java API中将C++传递过来的字符串显示到TextView中的例子.

JAVA code:

public class jni_test extends Activity {
  static private TextView tvLog;   // 要使其能在被C++调用的API中使用, 必须加static
  tvLog = (TextView) findViewById(...);

  public int PrintLog(String msg, int i) {
    tvLog.append(msg+i+"\n");  // 打印到TextView
    return 1;
  }
 
  public String GetJavaString() {
    String str = "String from Java!";
    return str;
  }

}

 

C++ code:

jobject getInstance(JNIEnv *env, jclass obj_cls)
{
  jmethodID  c_id = env->GetMethodID(obj_cls, "<init>", "()V");
  jobject obj = env->NewObject(obj_cls, c_id);
  return obj;
}


xxxxxxx(JNIEnv* env, jobject context)
{
  jclass cls;
  jobject obj;
  jmethodID mid1, mid2; 

  cls = env->FindClass("com/sample/jni_test");    // com/sample对应AndroidManifest.xml中定义的package
  if (cls != 0)
  {
    obj = getInstance(env, cls);
    mid1 = env->GetMethodID(cls, "PrintLog", "(Ljava/lang/String;I)I");
    if (mid1 !=0)
    {
      jstring jstrMSG = env->NewStringUTF("String from C!");
      int ret = env->CallIntMethod(obj, mid1, jstrMSG, 3);  // 用CallInt...是因为PrintLog返回int
      __android_log_print (ANDROID_LOG_INFO, "TEST", "PrintLog ret: %d\n", ret);  // 往LogCat打印
    }
    mid2 = env->GetMethodID(cls, "GetJavaString", "()Ljava/lang/String;");
    if (mid2 !=0)
    {
      jstring str = (jstring)env->CallObjectMethod(obj, mid2);  // 用CallObject...是因为GetJavaString返回String
      const char *newStr = env->GetStringUTFChars(str, 0);
      __android_log_print (ANDROID_LOG_INFO, "TEST", "GetJavaString ret: %s\n", newStr);
      env->ReleaseStringUTFChars(str, newStr);
    }
  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值