का उपयोग कर एसडी कार्ड से फ़ाइल IO एनडीके का उपयोग करके आउटपुट फ़ाइल पर लिखने की कोशिश कर रहा हूं, और ऐसा लगता है कि यह काम नहीं कर रहा है। कोड मैंने लिखा इस तरह दिखता है:एंड्रॉइड: एनडीके
JNIEXPORT jdouble JNICALL Java_com_example_sdcardtest2_CppMethods_nativeCalculations (JNIEnv* env, jclass clazz, jdouble dub){
jdouble hub = dub + 10;
FILE* file = fopen("/sdcard/textTest.txt","w+");
fputs("HELLO WORLD!\n", file);
fclose(file);
return hub;
}
कारण है कि वापसी प्रकार एक डबल है, कि मैं एक और उद्देश्य के लिए समारोह का उपयोग करने पर योजना बना रहा हूँ, लेकिन मैं पहले कब फ़ाइल बाहर कोशिश कर रहा हूँ। logcat में, मैं निम्नलिखित त्रुटि हो रही है:
Fatal signal 11: (SIGSEGV) at 0x00000000c (code = 1) .....
अजीब बात है, जब मैं करने के लिए लिख सकते हैं या जावा फ़ाइल कब, मैं कोई समस्या नहीं कर रहा हूँ का उपयोग कर फोन करने वाले गतिविधि में एक ही फ़ाइल से पढ़ने के लिए प्रयास करें। और मैंने सुनिश्चित किया कि मेरे पास मैनिफेस्ट फ़ाइल में लेखन अनुमतियां हैं। साथ ही, अगर मैं FILE* file ...
लाइन को हटा देता हूं, और फ़ंक्शन से लौटाए गए डबल मान का उपयोग करने का प्रयास करता हूं, तो प्रोग्राम ठीक चलता है। क्या कोई मदद कर सकता है? क्या समस्या कुछ ऐसा हो सकता है जो मुझे Android.mk या Application.mk फ़ाइलों में शामिल करना चाहिए, उदाहरण के लिए?
अद्यतन मैं एक Samsung Galaxy Note 2 का उपयोग कर रहा है, तो यह है कि कोई फर्क
UPDATE2 बनाता
यहाँ पूर्ण कोड है:
जावा गतिविधि:
public class MainActivity extends Activity {
private TextView text1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.text1 = (TextView) findViewById(R.id.textView1);
double d = CppMethods.nativeCalculations(2.80);
String s = "The value of d is = " + d;
File f1 = new File("/sdcard/textTest.txt");
InputStream is = null;
try {
is = new FileInputStream(f1);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Scanner reader = new Scanner(is);
this.text1.setText(reader.nextLine().subSequence(0, s.length()));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
यहां मूल विधि है:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "com_example_sdcardtest2_CppMethods.h"
#include <stdio.h>
#include <string.h>
/*
* Class: com_example_sdcardtest2_CppMethods
* Method: nativeCalculations
* Signature: (D)D
*/
JNIEXPORT jdouble JNICALL Java_com_example_sdcardtest2_CppMethods_nativeCalculations
(JNIEnv* env, jclass clazz, jdouble dub){
jdouble hub = dub + 10;
FILE* file = fopen("/sdcard/textTest.txt","w+");
fputs("hello, world\n", file);
fclose(file);
return hub;
}
यहाँ Android.mk है:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := com_example_sdcardtest2_CppMethods.c
LOCAL_MODULE := com_example_sdcardtest2_CppMethods
include $(BUILD_SHARED_LIBRARY)
और यहाँ प्रकट है:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sdcardtest2"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.sdcardtest2.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
अद्यतन
अंतिम अद्यतन: मैं किसी और के फोन पर एक ही कोड की कोशिश की , एक आकाशगंगा नोट 2 भी, और यह काम किया। ऐसा लगता है कि समस्या मेरे फोन के साथ थी। विलाप
फ़ाइल अशक्त फिर ... – auselen
फ़ाइल वास्तव में अशक्त है, लेकिन कैसे है कि कोई मतलब है? अगर फ़ाइल निर्देशिका में नहीं है, तो फॉपेन इसे बनाएगा और फिर उस पर लिख देगा। इसके अलावा, के रूप में मैं प्रश्न में कहा, Main.java गतिविधि फ़ाइल में एक ही सटीक पथ का उपयोग कर मुझे किसी भी त्रुटि नहीं देता है (का उपयोग करते हुए 'f1 = नई फ़ाइल ("/sdcard/textTest.txt ") फ़ाइल' – user1023420
आप क्या है 'android.permission.WRITE_EXTERNAL_STORAGE' अनुमति – auselen