我正在尝试创建一个 Android 应用程序来使用 NDK 从文本文件中读取文本。我的 C 代码将一个字符串读入变量并将字符串变量返回到 java 代码。但是当我运行 Android 应用程序时,TextView 中显示的字符串显示为@ 等符号后跟一些矩形。从 JNI 返回字符串的格式是什么?检查下面的代码。我可以在没有任何其他权限的情况下读取系统文件吗?printf() 语句会做什么?
Java代码:
package com.example.openfile;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener{
public native String ndkopenfile();
static{
System.loadLibrary("mylib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//TextView textView1 = new TextView(this);
//textView1.setText(ndkopenfile());
Button button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String str1;
Log.d("Click","The button has been clicked to open the file");
str1=ndkopenfile();
//setTitle(str1);
TextView tv = (TextView)findViewById(R.id.textView1);
tv.setText(str1);
}
}
C code:
JNIEXPORT jstring JNICALL Java_com_example_openfile_MainActivity_ndkopenfile
(JNIEnv *env, jobject this)
{
jstring str1[20];
FILE* fp = fopen("/sdcard/x.txt","w+");
if(fp!=NULL)
{
fgets(str1,20,fp);
fflush(fp);
fclose(fp);
return(*env)->NewStringUTF(env,str1);
}
else
{
fclose(fp);
return(*env)->NewStringUTF(env,"Error opening file!");
}
}
尝试这个:
JNIEXPORT jstring JNICALL Java_com_example_openfile_MainActivity_ndkopenfile
(JNIEnv *env, jobject this)
{
char myStr[20];
FILE* fp = fopen("/sdcard/x.txt","w+");
if(fp!=NULL)
{
fgets(myStr,20,fp);
fflush(fp);
fclose(fp);
return(*env)->NewStringUTF(env,myStr);
}
else
{
fclose(fp);
return(*env)->NewStringUTF(env,"Error opening file!");
}
}
这项技术非常有效!已测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)