使用存储在main.java外部的load()和save()方法时遇到问题

时间:2013-03-21 01:22:35

标签: java android

这是我的io.java文件的样子,它包含类“io”,它包含我的方法load()和save()。

 package com.myschedules;

 //FILE I/O
 import java.io.*; 
 import android.content.Context;

 public class io {

Context asdf;

//save file 
public  void save(String filename, String data) { 

    try { 
        FileOutputStream fos = asdf.openFileOutput(filename, Context.MODE_PRIVATE); 
        fos.write(data.getBytes()); 
        fos.close(); 
    } 
    catch (Exception ex) { 
    }
}


//load file
public  String load(String filename) {
    try { 
         FileInputStream fis = asdf.openFileInput(filename);
         BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
         String line = null, input="";
         while ((line = reader.readLine()) != null) input += line; 
         reader.close(); fis.close();
         return input; 
    } 
    catch (Exception ex) {
         return ""; 
    }
 }

}

当我在main中调用这些方法时,它看起来像这样:

 io login_io = new io();
 String login_preferences = login_io.load("login_preferences.dat");

不幸的是,这只会导致我的应用在启动时崩溃。如何将load()和save()函数存储在一个单独的文件中,以免弄乱我的main。区划对我自己的组织来说非常重要。使用#include或import调用在其他语言中这很简单,但我在这里迷失了。

编辑:

好的,现在我有另一个问题......这是来自MainActivity.java。我想在点击一个按钮后做一些文件I / O.但是,它最终会在“io login_io = new io(this);”上产生此错误:

“构造函数io(new View.OnClickListener(){})未定义”

 cmd_login.setOnClickListener(new OnClickListener()
    {

        public void onClick(View v) 
        {

            io login_io = new io(this);
            String login_preferences = login_io.load("login_preferences.dat");

2 个答案:

答案 0 :(得分:1)

您何时为asdf分配上下文?如果你不是,你就会遇到NullPointerException。

答案 1 :(得分:0)

崩溃可能是Context变量NullPointerException上的asdf。 您需要在构造函数中设置asdf

像这样添加构造函数

// Constructor
public io(final Context context) {
    asdf = context;
}

public void save... // do not change.
public String load... // do not change.

您还必须将活动/上下文'this'变量添加到MainActivity类中io类的实例化中,如下所示:

更改

io login_io = new io(); // Bad :(

到此

io login_io = new io(this); // Good :)

P.S。我从下面的评论中了解到,MainActivity.java是一个Android Activity类(即“class MainActivity extends Activity”),因此'this'是正确的类型。这是个好消息。