1

このコードは、彼が入力したユーザー名とパスワードで新しいユーザーを作成し、その新しいオブジェクトを彼の電子メールと一致するファイル名で電話メモリに保存することになっています。これにより、ログイン方法で、入力された電子メールと一致するファイルを検索して逆シリアル化できます。 、そして彼のすべてのユーザー情報がそこにあるでしょう...しかし私はFileNotFooundExceptionを受け取り続けます...私は本当に理解していません...誰かが私を助けてください!:)

コードは次のとおりです。

  package com.example.eventmanager;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class CreateAccount extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_account);
    }

    public void createUserAccount(View v) {

        EditText username = (EditText) findViewById(R.id.editText1);
        EditText password = (EditText) findViewById(R.id.editText2);
        EditText secondPassword = (EditText) findViewById(R.id.editText3);

        if (!(password.getText().toString().equals((secondPassword.getText()
                .toString())))) {
            Toast.makeText(this, "Passwords Don't Match", Toast.LENGTH_LONG).show();
        } else {

            User newUser = new User(username.getText().toString(), password.getText().toString());

            String fileName = newUser.getEmail();

            try {
                ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(fileName));
                os.writeObject(newUser);
                os.close();

            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                Toast.makeText(this, "FileNotFoundException", Toast.LENGTH_LONG)
                        .show();
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                Toast.makeText(this, "IOException", Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }

            Intent intent = new Intent(this, LoginScreen.class);
            startActivity(intent);

            Toast.makeText(this, "Account Created Successfully",
                    Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_create_account, menu);
        return true;
    }
}
4

2 に答える 2

0

ドキュメントごと:以下のシナリオFileOutputStreamでスローされます:FileNotFoundException

FileNotFoundException-ファイルが存在するが通常のファイルではなくディレクトリである場合、または存在しないが作成できない場合、またはその他の理由で開くことができない場合

有効なファイル名になることを確認してくださいString fileName = newUser.getEmail().toString();。これが当てはまると思います。

于 2012-12-02T02:26:24.270 に答える
0

FileOutputStreamファイル名のみを指定すると、デフォルトで内部ストレージのルートになる(と思う)絶対パスを使用します-通常のデバイスでは、内部ストレージのルートにアクセスできません。

openFileOutput(String name, int mode)代わりに使用する必要があります。これにより、独自のアプリに割り当てられた領域の内部ストレージにファイルが作成されることが保証されます。ファイルを読み戻すには、対応するopenFileInput(String name)メソッドを使用します。

于 2012-12-02T04:47:26.817 に答える