0

这是我的 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() 函数存储在一个单独的文件中,以免弄乱我的主文件。划分对我自己的组织极为重要。这在其他语言中使用 #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");
4

2 回答 2

1

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

于 2013-03-21T01:27:23.567 回答
0

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

像这样添加构造函数

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

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

您还必须将 Activity/Context 'this' 变量添加到ioMainActivity 类中的类的实例化中,如下所示:

改变

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

对此

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

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

于 2013-03-21T01:27:39.040 回答