- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
免责声明
问题已经解决,正如我在评论中描述的那样。我正在考虑删除它,因为没有答案并且我不想混淆其他人,但我的修复不一定针对问题但可以解决它。所以,我会保留它,希望有一天有人会找到答案。
原始问题
我正在使用 android ndk 读取一些文件,但我在输出方面遇到了一些问题。问题是,它大部分时间都在工作,但偶尔会给出错误的输入。下面是我的代码是如何设置的(请注意,这不是完整的代码,但如果需要更多信息,我会添加它。我只是想保持简单)。确切的问题是下面的代码。
1.1 : 文件1.cpp
JNIExport jdoubleArray class_path_nativeMethod
(JNIEnv* env, jclass thiz, jint index, jint size){
jdouble dubArray[6];
jdoubleArray result;
result = env->NewDoubleArray(size);
string s = "/sdcard/" + construct_fileName(index);
ifstream is;
if(is.fail()){
return NULL;
}
is.open(s.c_str());
// read something from the files
// save it into dubArray
// assign dubArray to result
return result;
}
1.2 : 文件2.cpp
string construct_fileName(int index){
string s;
switch(index){
case 0:
s = "file1.ext";
break;
case 1:
s = "file2.ext";
break;
case 2:
s = "file3.ext";
break;
default:
// something
}
return s;
}
2 现在是我的主要 Activity ,MainActivity.java
private TextView output;
private TextView output2;
private RadioGroup radioGroup;
private Button calculateButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.output = (TextView) findViewById(R.id.textView2);
this.output2 = (TextView) findViewById(R.id.textView3);
this.radioGroup = (RadioGroup) findViewById(R.id.radioGroup1);
this.calculateButton = (Button) findViewById(R.id.button1);
}
public void calculate(View v){
int index;
switch (v.getId()){
case(R.id.button1){
switch(radioGroup.getCheckedRadioButtonId()){
case R.id.radio0:
index = 0;
break;
case R.id.radio1:
index = 1;
break;
case R.id.radio2:
index = 2;
break;
}
}
double arr[] = CppMethods.nativeCalculations(index, 2);
Double i, j;
i = Double.valueOf(arr[0]);
j = Double.valueOf(arr[1]);
this.output.setText(i.toString().subSequence(0, i.toString().length()));
this.output2.setText(j.toString().subSequence(0, j.toString().length()));
}
}
所以问题是,textviews 中的值大部分时间都是正确的。但是,假设我选择了 radio0
按钮,然后按下 button
对象 50 次,我将在 TextView 中得到不正确的输出 5 或 6 次,然后更正其他时间输出。
一些可能有用的信息:
很抱歉这个问题很长
谢谢,
NAX
最佳答案
这可能无法解决您的问题,但我注意到以下几点可能会对您有所帮助:
在您的 file1.cpp
中,遗漏了 env->NewDoubleArray()
的错误处理(或者您是为了发布而故意遗漏的?)
我不知道您如何将 double
分配给 jdoubleArray
,但这里有一些来自 Google(事实上它也适用于其他 JNI 环境):
线程问题 1:如果你的 native 代码没有为多线程做好准备,我认为最好将 synchronized
添加到 CppMethods.nativeCalculations()
(因为 fstream
如果不这样做,则在另一个调用到来时可能仍处于打开状态):
public class CppMethods {
public static native synchronized double[] nativeCalculations(int index, int size);
}
线程问题 2:您可能需要像 runOnUiThread
这样的东西包装 setText()
电话。另外,我想知道你为什么调用setText()
如此复杂,我认为这就足够了(顺便说一句, String
是 CharSequence
):
final double[] arr = CppMethods.nativeCalculations(index, 2);
this.runOnUiThread(new Runnable() {
public void run() {
this.output.setText(String.valueOf(arr[0]));
this.output2.setText(String.valueOf(arr[1]));
}
});
关于java - Android 读取文件和偶尔不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318264/
我有 4 个 TextView。它们一开始都是不可见的,我将它们动画到屏幕上(从底部滑入)。我启动一个线程来为每个动画制作动画,每个动画开始时间间隔 200 毫秒。问题是:开始 Activity 后第
我有一个奇怪的问题,我似乎无法解决。 :(我有一个基于 Web 的应用程序,可以发送电子邮件。它通过连接在本地网络上设置的基于 Windows 的 SMTP 服务器来实现。此 SMTP 服务器不需要我
从昨天开始,我一直遇到一些设备收不到推送通知的问题。证书/设备 token 似乎是正确的,因为直到昨天,该设备还可以成功接收推送通知。 在服务器端,没有错误或连接拒绝,而且推送通知似乎每次都发送成功。
我有一个将 Angular 错误记录到数据库的应用程序,并且我偶尔会看到此错误的日志 Error: [$compile:tpload] http://errors.angularjs.org/1.5.
我收到一个 ImportError from azure.storage.blob import BlobServiceClient 但是我意识到当我安装依赖项时会发生错误 pip install a
我已经完成了使用AVAudioPlayer实现的简单音频播放GUI。 播放声音时,我使用UISlider提供播放反馈... 这是奇怪的地方。 我有一个非常偶尔发生的问题-而且大多数情况都不会发生,因此
在我的 XNA 游戏中,我的计算机(2.5 Ghz 双核 Intel Centrino 2)在 Debug模式下有一个大约需要 10 毫秒的操作。它只会每隔几分钟运行一次,它基本上只是整数数学/按位运
我相信我的应用程序编码正确(至少大部分是这样),因为它在大约 98% 的时间里都能正常工作。但是,大约 2% 的时间,我得到的似乎是有效的身份验证 token ,但是当我去发布照片时,我收到以下错误“
我在 apple store 上有一个应用程序,在 iOS6 更新后,我在 MKMapView 中收到了数百份崩溃报告。我无法在我的设备上重现崩溃。它看起来像是 EAGLContext 的问题。我们不
我最近开始使用 Foundation 5(我第一次使用 Foundation),我遇到了一个问题,似乎任何元素都响应了 .click 事件(例如顶部导航栏,单击元素时显示的数据下拉列表)将随机不起作用
花了大约一整天的时间试图解决这个问题,希望有人能帮助我!我是新来的,所以如果这是一个重复的问题,我深表歉意(我做了我的研究,但无法提前找到任何东西)。 我正在为我的咨询公司构建的网站使用浏览器缓存,但
我有一个表格,使用了以下 CSS 和 HTML: .price { position:relative; display:block; text-align:center; }
我们使用 ansible 将多个节点配置为一个集群。这些机器是在自定义 AWS 类似基础设施上创建的实例。 我们在不同的剧本上有大约一百个任务,它们在每个节点上执行。 问题是,我们收到零星的主机无法访
我们偶尔会从用户那里收到崩溃报告(我们使用崩溃报告程序包将崩溃发送到我们的服务器),并出现以下错误: “非法尝试在不同上下文中的对象之间建立关系‘...’” (不同的报表可能有不同的关系,并非所有报表
我是一名优秀的程序员,十分优秀!