【问题标题】:NullPointerException error when calling a Method with openFileInput from a different class [duplicate]使用来自不同类的 openFileInput 调用方法时出现 NullPointerException 错误 [重复]
【发布时间】:2016-01-22 10:10:33
【问题描述】:

Android 编程新手 - 对不正确的行话表示歉意。

我的应用可以保存输入到EditText 字段的数据。 然后它可以加载此数据并将此数据的值设置为字符串变量。 然后它使用这些字符串执行 POST HTTP 请求。

我正在使用openFileInputopenFileOutput 加载/保存字符串文件

我已经创建了方法:

public String LoadMethod()
public String SaveMethod()

当方法与调用它的 Activity 属于同一类时,这些方法可以正常工作。

我的问题是 2 个活动需要能够运行 public String LoadMethod()

所以我所做的是创建 2 个用于加载和保存数据的 java 类文件。 在我尝试调试时,文件中有一些注释。

LoadUserDetails.java

public class LoadUserDetails extends AppCompatActivity {
    public static String sSavedName;
    public static String sSavedCompany;
    public static String sSavedPhone;
    public static String sSavedCarRegistration;
    String sNameFile = "name_file";
    //private Context context;

    public String LoadMethod(){

    /* OPEN DETAILS FROM INTERNAL STORAGE*/

        //context = getActivity();
        /*NAME*/
        try {

            String sOpenName;
            FileInputStream fileInputStream = openFileInput("name_file");
            InputStreamReader inputStreamReaderName = new InputStreamReader(fileInputStream);
            BufferedReader bufferedReaderName = new BufferedReader(inputStreamReaderName);
            StringBuffer stringBufferName = new StringBuffer();
            while ((sOpenName = bufferedReaderName.readLine()) != null) {
                stringBufferName.append(sOpenName + "\n");
            }

            sSavedName = (stringBufferName.toString());

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

代码重复打开其他 3 个字符串文件。

我使用此代码从我的UserDetails.java Activity 和MainActivity.java Activity 启动此方法:

//Load User Details
        LoadUserDetails load = new LoadUserDetails();
        load.LoadMethod();

这是我在 logcat 中遇到的错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.visitorrego.oem.smartsigninvisitor/com.visitorrego.oem.smartsigninvisitor.UserDetails}: java.lang.NullPointerException

.......

Caused by: java.lang.NullPointerException
            at android.content.ContextWrapper.openFileInput(ContextWrapper.java:191)
            at com.visitorrego.oem.smartsigninvisitor.LoadUserDetails.LoadMethod(LoadUserDetails.java:31)
            at com.visitorrego.oem.smartsigninvisitor.UserDetails.onCreate(UserDetails.java:37)

我尝试过使用Context 并且ContextWrapper 错误消失了,但我仍然得到其他错误:(

我知道这与使用来自不同类的 OpenFileInput 调用方法有关。 我在 webrequest 类中调用 postrequest 方法没有问题...

有什么想法吗?

如果需要,可以发布更多代码。

【问题讨论】:

    标签: android class methods nullpointerexception


    【解决方案1】:

    从您的代码中我可以理解,LoadUserDetails 类不是一个活动, 所以可能你可能需要改变

    public class LoadUserDetails extends AppCompatActivity 
    

    public class LoadUserDetails
    

    从您正在调用的页面发送上下文作为参数。因为上下文通常在 onCreate() 初始化(通常用于活动)。

    函数将是

    public String LoadMethod(Context context){
        ....
        FileInputStream fileInputStream = context.openFileInput("name_file");
        ....
    }
    

    你可以调用它

     LoadUserDetails load = new LoadUserDetails();
     load.LoadMethod(getApplicationContext());
    

    【讨论】:

    • 是的,就是这样!谢谢!我一直在抢先一步,不明白扩展 AppCompatActivity 和 Context 意味着什么:P 现在更有意义,我知道这将是简单的修复:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多