通过JNI从本机代码访问java变量给出垃圾值

时间:2013-03-08 06:18:18

标签: java android android-ndk java-native-interface native

我正在Android中创建一个视频播放器。在我的Android代码中,我有一个用于播放/暂停状态的切换按钮。如果plafFlag = 0,那么视频需要暂停(playFlag是java部分代码中的一个变量)。

在代码的原生方面,我试图在每次将一个帧显示到屏幕上之前访问该playFlag的值。

以下是我的java部分代码:

public class myPlayer extends Activity {
    public int playFlag;
   .
   .
   .
   .
   protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.player);
          final ToggleButton playFlagBtn=(ToggleButton) findViewById(R.id.toggleButton1);

         playFlagBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                if(playFlagBtn.isChecked()){
                    playFlag=0;
                }
                else{
                    playFlag=1;
                }
            }
        });

从这个 OnCreate 函数本身,我调用了本机代码,我正在尝试访问 playFlag 变量。

以下是我正在访问 playFlag 变量的代码段:

jclass cls = (*env)->FindClass(env,"com/example/my_decoder/myPlayer");  __android_log_print(ANDROID_LOG_DEBUG,"MYAPP","reference to class obatined",NULL);

 jfieldID fidInt=(*env)->GetFieldID(env,cls,"playFlag","I");
 __android_log_print(ANDROID_LOG_DEBUG,"MYAPP","fid obtained",NULL);

 int Flag=0;

__android_log_print(ANDROID_LOG_DEBUG,"MYAPP","Before fetching flag value",NULL);
playFlag=(*env)->GetIntField(env,jobj,fidInt);
__android_log_print(ANDROID_LOG_DEBUG,"MYAPP","Initial value of playflag=%d",playFlag);

上述本机代码段不会出错。获取该值,但它似乎是一些垃圾值。

在logcat中我输出如下:

03-08 11:21:32.627: D/MYAPP(31220): Initial value of playflag=1085053248

这里的主要目的是在获取标志的值为0时暂停解码过程,否则继续解码帧并在屏幕上呈现它。因此,对我而言,从代码的java部分获取标志的正确值非常重要。

任何人都可以解释我哪里出错了。或者,如果有其他方法可以做到这一点。

等待一些回复。提前谢谢。

0 个答案:

没有答案