Android - 在内存上保存对象

时间:2012-12-02 02:22:24

标签: java android login

此代码应该使用他输入的用户名和密码创建一个新用户,然后将该新对象保存到手机内存中,文件名与其电子邮件匹配,以便在登录方法中我可以查找与该电子邮件匹配的文件进入反序列化它,他的所有用户信息都会在那里...但我一直得到一个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;
    }
}

2 个答案:

答案 0 :(得分:0)

FileOutputStream个文档:它会在下面的场景中抛出FileNotFoundException

  

FileNotFoundException - 如果文件存在但是是目录而不是常规文件 OR 不存在但无法创建,则因任何其他原因无法打开< / p>

请确保String fileName = newUser.getEmail().toString();生成有效的文件名,我怀疑是这种情况。

答案 1 :(得分:0)

FileOutputStream使用绝对路径(我认为)默认为内部存储的根目录,如果您只提供文件名 - 在普通设备上,内部存储的根目录将无法访问。< / p>

您应该使用openFileOutput(String name, int mode)代替。这可以保证在分配给您自己的应用程序的区域中的内部存储中创建文件。要重新读取文件,请使用相应的openFileInput(String name)方法。