Java Android-openFileInput()NullPointerException
我正试图在我的android应用程序中生成一个代码作为字符串,并将其保存到一个文本文件中。当您按下共享按钮时,代码应从文本文件中读取并复制到剪贴板 我想我还不了解有关活动/背景的一些东西。 当然,我在文档中读到了这方面的内容,但我无法找出问题所在。希望你们能帮助我 FileSystem.javaJava 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活
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。