Java Android-openFileInput()NullPointerException

Java Android-openFileInput()NullPointerException,java,android,io,nullpointerexception,Java,Android,Io,Nullpointerexception,我正试图在我的android应用程序中生成一个代码作为字符串,并将其保存到一个文本文件中。当您按下共享按钮时,代码应从文本文件中读取并复制到剪贴板 我想我还不了解有关活动/背景的一些东西。 当然,我在文档中读到了这方面的内容,但我无法找出问题所在。希望你们能帮助我 FileSystem.java package com.niclasjaksch.shoppinglist; 导入android.content.Context; 导入androidx.appcompat.app.appcompat活

我正试图在我的android应用程序中生成一个代码作为字符串,并将其保存到一个文本文件中。当您按下共享按钮时,代码应从文本文件中读取并复制到剪贴板

我想我还不了解有关活动/背景的一些东西。 当然,我在文档中读到了这方面的内容,但我无法找出问题所在。希望你们能帮助我

FileSystem.java

package com.niclasjaksch.shoppinglist;
导入android.content.Context;
导入androidx.appcompat.app.appcompat活动;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.io.IOException;
类文件系统扩展了AppCompatActivity{
静态字符串filename=“shoppinglist\u code.txt”;
void Create(){
试一试{
FileOutputStream fOut=openFileOutput(文件名,Context.MODE\u PRIVATE);
String str=Utility.randomString(10);
写入(str.getBytes());
fOut.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
字符串读取(){
字符串结果=”;
试一试{
FileInputStream fin=openFileInput(文件名);
INTC;
而((c=fin.read())!=-1){
结果+=c;
}
fin.close();
}捕获(例外e){
System.out.println(“发生错误”);
e、 printStackTrace();
}
返回结果;
}
无效清除(){
试一试{
File dir=getFilesDir();
文件=新文件(目录,文件名);
delete();
}捕获(例外e){
System.out.println(“发生错误”);
e、 printStackTrace();
}
}
}
Share.java

package com.niclasjaksch.shoppinglist;
导入android.content.ClipData;
导入androidx.appcompat.app.appcompat活动;
类共享扩展了AppCompatActivity{
android.content.ClipboardManager ClipboardManager=null;
FileSystem fs=新文件系统();
无效股份(){
字符串代码=fs.Read();
如果(代码==“”| |代码==null){
fs.Create();
code=fs.Read();
}
ClipData ClipData=ClipData.newPlainText(“源文本”,代码);
setPrimaryClip(clipData);
}
}
MainActivity.java

。。。
股份=新股份();
...
@凌驾
公共布尔值OnOptionItemSelected(@NonNull MenuItem item){
开关(item.getItemId()){
案例R.id.item\U共享:
share.share();
返回true;
违约:
返回super.onOptionsItemSelected(项目);
}
}
获取此行中的NullPointerException:

FileOutputStream fOut=openFileOutput(文件名,Context.MODE\u PRIVATE);

仅为实际UI工作创建
AppCompatActivity
的子类,您将使用
startActivity()
startActivityForResult()启动该活动


将这些方法移动到实际活动中,例如
MainActivity
,并去掉
Share
FileSystem
类。

首先,您不应该为
FileSystem
Share
扩展
AppCompatActivity

发生的情况是,
openFileOutput
文件系统
对象(
this
)作为它的上下文。事实上,这不算是一项单独的活动


您可以按照CommonWare的建议,删除类
文件系统
共享
,并将它们的函数移动到
main活动
。或者您可以从
MainActivity

显式传递
上下文
,也请共享日志猫,以便我们了解哪个变量被分配为null。