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 回答