Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用存储在main.java之外的load()和save()方法_Java_Android - Fatal编程技术网

无法使用存储在main.java之外的load()和save()方法

无法使用存储在main.java之外的load()和save()方法,java,android,Java,Android,下面是我的io.java文件的样子,它包含类“io”,它保存我的方法load()和save() } 当我在main中调用这些方法时,看起来是这样的: io login_io = new io(); String login_preferences = login_io.load("login_preferences.dat"); 不幸的是,这只会导致我的应用程序在启动时崩溃。如何将load()和save()函数存储在一个单独的文件中,以避免主文件中出现混乱。划分对我自己的组织来说非常重要。

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

}

当我在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(新视图.OnClickListener(){})未定义”


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

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

像这样添加构造函数

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

public void save... // do not change.
public String load... // do not change.
io login_io = new io(); // Bad :(
io login_io = new io(this); // Good :)
您还必须将Activity/Context“this”变量添加到MainActivity类中的
io
类的实例化中,如下所示:

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

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

public void save... // do not change.
public String load... // do not change.
io login_io = new io(); // Bad :(
io login_io = new io(this); // Good :)
对此

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

public void save... // do not change.
public String load... // do not change.
io login_io = new io(); // Bad :(
io login_io = new io(this); // Good :)

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

你对main是什么意思?您知道Android中有活动吗?可能您必须在清单XML文件中设置相应的权限才能访问文件系统。清单包括对读写功能的调用。此外,main指的是MainActivity.java。我的程序中的第一个(也是唯一一个)活动。如果main是main活动扩展活动,你应该相应地更新你的问题。公共io是一个类,但是。class main活动扩展活动是我所说的。“io”是一个类。在io.java中的“save()”和“load()”旁边添加请求的构造函数“public io(final Context Context)”。通过添加上下文参数修改对“new io()”的调用,更改您的主要活动。原始post引用“main”,因此我假设为“main.java”。“MainActivity”实际上是一个更好的名称。我假设“newIO(this)”位于“MainActivity.java”中。如果没有,那么可能需要进行更多的修改。因此,现在我应该有load()、save()和io()方法?如何将上下文分配给asdf?为了将“context”分配给“asdf”,您必须以某种方式将“context”传递到“io”类中。最明显的方法是通过对“io”类的构造函数,正如另一个答案中所建议的那样。在save()或load()方法中是否需要调用方法io()?我不明白,如果这些方法没有被引用,它们怎么会知道如何使用一个名为asdf的上下文..啊,但是当你调用“io login_io=new io(this)”时,它们在MainActivity.java类中被引用了。这就是将上下文传递到“io”类的方式。通过创建构造函数,它现在表示在load()和save()方法中,asdf无法解析。