2

我的 NDK 应用程序有一个 c 文件(ht_NDK.c)功能,如下所示,

int heatcon_readtemperature(char* temperature)
   {
    int nret,ok;
    char cmd[3]={'d',0x0d, 0x0a};
    struct pollfd pfd;
    static int i=0;
        char read_temp[255]="banagalore";
    i++;
    memcpy(temperature, &read_temp, i);
    if(i==10)
    i=0;
    return nret;
    }

在另一个 c 文件(second.c)中,我正在调用上面的函数,如下所示,

jstring
Java_com_example_ndk_ReadData_readData( JNIEnv*  env,
                                      jobject this,jstring printMatter, jint j)
{
   char sz[55] = {0};
   return((*env)->NewStringUTF(env,  heatcon_readtemperature(sz)));       

} 

上面的函数在我的 java 类(ReadData.java)中调用,如下所示

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_read_data);       


        btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                ReadData rd = new ReadData();
                String n = rd.readData();
                Log.i("NDK", "msg" +n);         
            }
        });

       }

   static
    {
        System.loadLibrary("ht");
        System.out.println("loded library");
    }  


      public native int[] readData();

    }    
}

这样每当我按下按钮时,该值都应该打印在控制台上,一切都很好,但它的打印值为空。如何char在java类中调用数据类型。我想我错过了一些东西。如何解决这个问题?

4

1 回答 1

3

您的第一个函数输出两件事:

  • 它返回一个 int 值(未初始化,您需要修复它)
  • 它修改 char* 参数。

当您创建 java 字符串 (NewStringUTF) 时,您将传递 int 返回值。您可能打算改为传递 char* 值:

char sz[55] = {0};    
heatcon_readtemperature(sz);
return (env*)->NewStringUTF(env, sz);
于 2012-10-30T06:40:10.553 回答