android - 把原来的所有代码放入新建项目后SharedPreferences报错
PHP中文网
PHP中文网 2017-04-17 17:18:47
[Android讨论组]

新建一个项目,包名与原来项目相同,再把原来所有项目复制过来,结果在getSharedPreferences中报错.代码如下

public static String getSharePreStr(String field) {
        String FILE = MyApplication.instance().getResources().getString(R.string.app_dir);
        SharedPreferences sp = (SharedPreferences) MyApplication.instance().getSharedPreferences(FILE, 0);
        String s = sp.getString(field, "");
        return s;
    }
    
    开始的时候判断是否有缓存,第一个错误是
    
Attempt to invoke virtual method 'android.content.res.Resources com.fenghua.traffic.MyApplication.getResources()' on a null object reference

于是我把String FILE = MyApplication.instance().getResources().getString(R.string.app_dir);
换成了String FILE = "XXX";
这句没错了,然后再次运行,报错

 Attempt to invoke virtual method 'android.content.SharedPreferences com.fenghua.traffic.MyApplication.getSharedPreferences(java.lang.String, int)' on a null object reference
 
 什么情况,求解,.代码是全部从原来复制过来的
PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
迷茫

很明显是MyApplication.instance()这个为空啊,看看有没有初始化。

阿神

MyApplication.instance() 为null,调用前应该检查,据说是个好习惯,也方便写log
有可能是你没有完全重新编译代码?把app删掉然后rebuild试试

高洛峰

MyApplication.instance()换成Activity对象

这里如果没有的话,不推荐传递,但是传递过来Context也就是上下文后,有Context也是可以转换一下的,代码如下

((getContext)Activity).getSharedPreferences......

还有,年轻人,以后写代码呢,要考虑到复用的问题,如果用到两处以上的,可以新建变量进行赋值,之后调用。节省资源使用。现在看不出来,我最开始也是这样,现在参加工作了,写完代码后各种改,心累= =

还是不会的话站内可以联系我的,以后有问题都可以问我哦~

采纳哦~

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号