1

そのため、ファイルを書き込もうとすると NullPointerException を作成するアプリを実行しています。

最初のアクティビティ (以下を参照) は、ユーザーが新しい設定ボタンを押したときに NewSet アクティビティを呼び出します。NewSet アクティビティに入力を書き込もうとすると、NullPointerException がスローされます。fileOut を印刷すると、null の値が表示されますが、これはすべきではありません。fileOut はグローバルに宣言されていますが、onCreate で初期化されています。2 つのクラスは以下のとおりです。(... は無関係のため省略されたコードを表します。)

public class MainActivity extends Activity {
    static ArrayList sets;
    FileOutputStream fileOut;
    BufferedReader read;
    String line;
    ArrayAdapter<String> adapter;
    ListView listView;
    Intent newSetIntent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        newSetIntent=new Intent(this,NewSet.class);

        listView=(ListView)findViewById(R.id.setList);
        sets=new ArrayList();
        try {
            read=new BufferedReader(new BufferedReader(new InputStreamReader(openFileInput("SETS.txt"))));
            fileOut=openFileOutput("SETS.txt",Context.MODE_APPEND);
        } catch (FileNotFoundException e) {
            System.out.println("File not found");
            try {

                fileOut.write("".getBytes());
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("IOE");
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        getSets();
        toList();
        super.onCreate(savedInstanceState);
    }

    ...

    public void newSet(String newSetName){
        System.out.println(newSetName);
        sets.add(newSetName);

        try {
            fileOut=openFileOutput("SETS.txt",Context.MODE_APPEND);
            fileOut.write(newSetName.getBytes());
            fileOut.write("\n".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
        catch (NullPointerException NPE){
            System.out.println(fileOut);
            NPE.printStackTrace();
        }


    }
}





public class NewSet extends Activity {

    EditText input;
    String setName;
    MainActivity main;
    ...
    public void submit(View view){
        setName=input.getText().toString();
        System.out.println("CREATING SET:"+setName);
        main.newSet(setName);
        finish();

    }

}

完全なスタック トレース

03-03 23:08:42.183: W/System.err(8435): java.lang.NullPointerException
03-03 23:08:42.183: W/System.err(8435):     at android.content.ContextWrapper.openFileOutput(ContextWrapper.java:173)
03-03 23:08:42.183: W/System.err(8435):     at com.ollien.flashcards.MainActivity.newSet(MainActivity.java:112)
03-03 23:08:42.183: W/System.err(8435):     at com.ollien.flashcards.NewSet.submit(NewSet.java:35)
03-03 23:08:42.193: W/System.err(8435):     at java.lang.reflect.Method.invokeNative(Native Method)
03-03 23:08:42.193: W/System.err(8435):     at java.lang.reflect.Method.invoke(Method.java:511)
03-03 23:08:42.193: W/System.err(8435):     at android.view.View$1.onClick(View.java:3594)
03-03 23:08:42.193: W/System.err(8435):     at android.view.View.performClick(View.java:4204)
03-03 23:08:42.193: W/System.err(8435):     at android.view.View$PerformClick.run(View.java:17355)
03-03 23:08:42.193: W/System.err(8435):     at android.os.Handler.handleCallback(Handler.java:725)
03-03 23:08:42.203: W/System.err(8435):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-03 23:08:42.203: W/System.err(8435):     at android.os.Looper.loop(Looper.java:137)
03-03 23:08:42.203: W/System.err(8435):     at android.app.ActivityThread.main(ActivityThread.java:5226)
03-03 23:08:42.203: W/System.err(8435):     at java.lang.reflect.Method.invokeNative(Native Method)
03-03 23:08:42.203: W/System.err(8435):     at java.lang.reflect.Method.invoke(Method.java:511)
03-03 23:08:42.203: W/System.err(8435):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
03-03 23:08:42.203: W/System.err(8435):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
03-03 23:08:42.203: W/System.err(8435):     at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

0

android.content.ContextWrapperクラスで例外がスローされています。方法は次のとおりです。

public FileOutputStream openFileOutput(String name, int mode) throws FileNotFoundException
{
    return mBase.openFileOutput(name, mode); // Line number 173
}

ここで、NullPointerException になる可能性がある唯一の可能性はmBase、タイプのデータ メンバーContextが NULL であることです。

Contextデータ メンバーが null でないかどうかを確認できますか。

于 2013-03-04T04:45:58.737 に答える