0

Androidの内部ストレージにデータを保存しようとしましたが、使用しているgetFilesDir()に関係していると思われるNullPointerExceptionが発生し続けますが、よくわかりません。それがその場合であるかどうかを明確にして、このファイルをデバイスに書き込むのを手伝ってください。ここでエラーメッセージが表示されます

01-20 22:11:59.020: E/AndroidRuntime(329): FATAL EXCEPTION: main
01-20 22:11:59.020: E/AndroidRuntime(329): java.lang.NullPointerException

01-20 22:11:59.020: E/AndroidRuntime(329):  at android.content.ContextWrapper.getFilesDir(ContextWrapper.java:178)

01-20 22:11:59.020: E/AndroidRuntime(329):  at yantz.imageapp4.main.writeElement(main.java:89)

01-20 22:11:59.020: E/AndroidRuntime(329):  at yantz.imageapp4.Panel.onTouchEvent(Panel.java:102)

これがメインクラスの oncreate です

   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   FrameLayout sv = new FrameLayout(this);
    LinearLayout ll = new LinearLayout(this);
     test = new Panel(this);
    test.settest(1)   ;   
    ll.setOrientation(LinearLayout.VERTICAL);
    sv.addView(test);
    sv.addView(ll);
    setContentView(sv);}

ここで、パネル クラスの OnTouch メソッド

public boolean onTouchEvent(MotionEvent event) {
    mainactivity=new main();    
    mainactivity.writeElement(new Element(getResources(),(int) event.getX(),(int)  event.getY()));
        Log.v("Gesture", "is 1 ");   
        return super.onTouchEvent(event);
 }

これが私のメインクラス内の私の writeObject メソッドです

public void writeElement(Element obj){
    Log.v("main", "made it to method writeElement" );
    File f = new File(getFilesDir()+FILENAME);
    try {
fos = new FileOutputStream(f);
    ObjectOutputStream objectwrite = new ObjectOutputStream(fos);
    objectwrite.writeObject(obj);
 fos.close(); 
 Log.v("main", "file was  made File ");

 }catch (FileNotFoundException e){
    e.printStackTrace();
    Log.v("main", "file was not made File not found ");
 } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    Log.v("main", "file was not made File IOException ");
}
}

マニフェスト

<uses-sdk android:minSdkVersion="10" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:label="@string/app_name"
        android:name="yantz.imageapp4.main" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

        <activity android:name=".charactors" android:label="@string/app_name"
        android:theme="@android:style/Theme.Black">
        <intent-filter>
    <action android:name="yantz.imageapp4.charactors" />
    <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
<activity android:name=".main2" android:label="@string/app_name"
        android:theme="@android:style/Theme.Black">
        <intent-filter>
<action android:name="yantz.imageapp4.main2" />
<category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
 </application>

</manifest>
4

2 に答える 2

1

私は何が悪いのか知っています。あなたはただ書くことはできません

mainactivity=new main();

getFilesDir は正しいコンテキスト インスタンスを取得する必要がありますが、現在は取得していません。そのようなことを試してください:

public boolean onTouchEvent(MotionEvent event) {
    main.writeElement(new Element(...), this.getContext);
    return super.onTouchEvent(event);
}

public static void writeElement(Element obj, Context context){
    ...
    File f = new File(context.getFilesDir(), FILENAME);
    ...
}
于 2012-01-21T04:49:22.670 に答える
0

してみてください、

AndroidManifest.xmlを開き、タグを閉じた後に次の行を記述します。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
于 2012-01-21T04:33:52.497 に答える