android - 从 strings.xml 获取字符串时出现 NullPointerException
问题描述
我有问题。为什么我有 NullPointerException ?
这是我来自调试器的日志:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: bjd.adrian.e_shop, PID: 5301
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
at android.content.ContextWrapper.getResources(ContextWrapper.java:86)
at android.view.ContextThemeWrapper.getResourcesInternal(ContextThemeWrapper.java:127)
at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:121)
at android.support.v7.app.AppCompatActivity.getResources(AppCompatActivity.java:542)
at android.content.Context.getString(Context.java:476)
at bjd.adrian.e_shop.LoginView.loggedIn(LoginView.kt:33)
at bjd.adrian.e_shop.LoginPresenter.endLoginisLogged(LoginPresenter.kt:25)
at bjd.adrian.e_shop.DbManager$login$stringRequest$2.onResponse(DbManager.kt:48)
at bjd.adrian.e_shop.DbManager$login$stringRequest$2.onResponse(DbManager.kt:35)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:82)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:29)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
这是我的代码:
class LoginView : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login_view)
loginBTT.setOnClickListener {
val loginPresenter = LoginPresenter()
var userName = userNameET.text.toString()
var password = passwordET.text.toString()
loginPresenter.login(userName, password, this@LoginView)
}
}
fun loggedIn()
{
val logged = this@LoginView.getString(R.string.logged)
Toast.makeText(this@LoginView, logged, Toast.LENGTH_LONG).show()
}
fun unLogged()
{
val invalidUserOrPass = this@LoginView.getString(R.string.invalidUSorPASS)
Toast.makeText(this@LoginView, invalidUserOrPass, Toast.LENGTH_LONG).show()
}
我有两种语言的strings.xml(主要是英语和波兰语)。
这是 DbManager:
package bjd.adrian.e_shop
class DbManager
{
val TAG: String = "DbManager"
var invalidUSorPass = "invalidUserNameOrPassword"
var signedIn = "signedIn"
fun login(username: String, password: String, context: Context)
{
val loginPresenter = LoginPresenter()
val requsetQueue = Volley.newRequestQueue(context)
val url = "https://shoppingcentreeshop.000webhostapp.com/androidAppScripts/hashedLogin.php"
var stringRequest = object : StringRequest(Method.POST, url,
Response.Listener<String>{ response ->
if(response.equals("ERROR"))
{
Log.v(TAG, invalidUSorPass)
loginPresenter.endLoginisntLogin()
}
else
{
Log.v(TAG, signedIn)
val gson = GsonBuilder().create()
var loginJSONdata = gson.fromJson<LoginJSONdata>(response, LoginJSONdata::class.java)
loginPresenter.endLoginisLogged()
}
}, object : Response.ErrorListener
{
override fun onErrorResponse(error: VolleyError?)
{
Log.e(TAG, error.toString())
}
}){
override fun getParams(): MutableMap<String, String>
{
var params = HashMap<String, String>()
params.put("user_name", username)
params.put("user_pass", password)
return params
}
}
requsetQueue.add(stringRequest)
}
}
解决方案
尝试这样做。
val logged: String? = this@LoginView.getString(R.string.logged)
和
val invalidUserOrPass: String? = this@LoginView.getString(R.string.invalidUSorPASS)
这是未经测试但值得一试
推荐阅读
- c++ - C++ 中未定义的右移行为
- go - 增加地图的最快方法是什么?
- swift - Swift 重构:将所有访问修饰符更改为“public”的速度有多快
- excel - 在 With 语句中将超链接和替代文本添加到形状
- wordpress - 意见:Wordpress 插件数据库存储
- azure-blockchain-workbench - 如何使用 Azure Blockchain Workbench REST API 获取和发布合同详细信息
- python - 线性回归(最佳拟合线)
- postgresql - ST_3DClosePoint 返回多个点
- sql - StoredProcedure 性能改进
- u-boot - 使用 ELDK 交叉编译器在 fedora 8 上编译 U-boot-1.1.6 时出错