ОТКАЗAndroid чтение из файлов и иногда неправильные значения
Проблема была решена, как я описал в комментариях. Я думал об этом, потому что ответа не было, и я не хотел путать других, но мое исправление не обязательно нацелено на проблему, но работает вокруг нее. Поэтому я просто оставлю это в надежде, что когда-нибудь кто-нибудь найдет ответ.
ORIGINAL ВОПРОС
Я использую андроид NDK для чтения из некоторых файлов и у меня возникли некоторые проблемы с выходом. Дело в том, что он работает большую часть времени, но он иногда дает неправильный ввод. Ниже приведен порядок настройки моего кода (обратите внимание, что это не полный код, но если требуется дополнительная информация, я добавлю его. Я просто хочу, чтобы это было просто). Точная проблема - это код ниже.
- В файле NDK C++ я использую fstream для чтения из файлов. Файлы хранятся во внутренней памяти телефона, поэтому он работает нормально. Там в 2 файла:
1.1: file1.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: file2.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 Сейчас моя основная деятельность, 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()));
}
}
Таким образом, проблема заключается в том, что значение в текстовых комментариях является правильным в течение большей части времени. Но, допустим, у меня есть кнопка radio0
, и я нажимаю объект button
50 раз, я получаю неправильный вывод в текстовых представлениях 5 или 6 раз и исправляю вывод в другие моменты времени.
Некоторая информация, которая может быть полезна:
- Когда выход неправильно, я получаю некоторое возмутительное количество, как 2.72364283467E17, в то время как выходы я ожидающие двойные значения меньше, чем 20, которые хранятся в файлы.
- Когда вывод неверный, оба текстовых изображения имеют смехотворное число, показанное выше
- Правильный код, потому что выход является правильным в большинстве случаев.
Извините за длинный вопрос,
Спасибо,
NAX
можно спросить, почему вы делаете это, это путь? – ElefantPhace
Это временно. Причина, по которой я вводя файлы с помощью C++, заключается в том, что я обработаю их там, прежде чем возвращать значение. Как я уже сказал, большая часть материала выше всего лишь временная, но мне нужно, чтобы она работала, чтобы двигаться дальше. – naxchange
Хмм ... ну, не зная, действительно ли это ваш фактический код, все, что я могу вам сказать, это то, что вы забыли «;» после вашего первого перерыва – ElefantPhace