转换器应用程序上的 java.lang.NullPointerException

java.lang.NullPointerException on converter app

提问人:Nico 提问时间:9/16/2022 最后编辑:Maneesha IndrachapaNico 更新时间:9/21/2022 访问量:73

问:

我目前正在创建一个带有 API 调用的实时货币转换器应用程序,但每当我单击按钮转换货币时,我的应用程序就会崩溃,并且会出现以下行:

java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.gson.JsonObject com.google.gson.JsonObject.getAsJsonObject(java.lang.String)' on a null object reference
        at com.example.converterproject.MoneyActivity$1$1.onResponse(MoneyActivity.java:70)

以下是我编写的一些代码:

MoneyButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            RetrofitInterface retrofitInterface = RetrofitBuilder.getRetrofitInstance().create(RetrofitInterface.class);
            Call<JsonObject> call = retrofitInterface.getExchangeCurrency(MoneyTo.getSelectedItem().toString());
            call.enqueue(new Callback<JsonObject>() {
                @Override
                public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
                    JsonObject res = response.body();
                    JsonObject rates = res.getAsJsonObject("rates");
                    double currency = Double.valueOf(MoneyEd.getText().toString());
                    double multiplier = Double.valueOf(rates.get(MoneyFrom.getSelectedItem().toString()).toString());
                    double result = currency * multiplier;
                    MoneyTextView.setText(String.valueOf(result));


                }

                @Override
                public void onFailure(Call<JsonObject> call, Throwable t) {

                }
            });
        }
    });

所以很明显是导致问题的线路。我真的不知道如何解决这个问题,所以我非常感谢一些帮助JsonObject rates = res.getAsJsonObject("rates");

java android-studio nullpointerexception 转换器

评论

0赞 blackapps 9/16/2022
NullPointerException
0赞 Maneesha Indrachapa 9/16/2022
似乎您的对象正在接收 null 值,这就是发生的原因。您可以调试项目并检查是否为对象获取了正确的值ratesNullPointerException
0赞 Tyler V 9/16/2022
您能否为问题中的 api 调用提供一个 url,以便其他人可以复制相同的问题?没有这个,我们只能说这是空的......也许它返回的字符串是 JSONArray,而不是对象,或者根本不是 Json?res
0赞 Nico 9/16/2022
我发现了问题,我的 api 调用的 url 不再起作用了。我找到了一个新的,现在它完美地工作了。谢谢你帮助我:),伙计们!
0赞 M DEV 9/17/2022
此错误表示缺少某些数据。首先添加 Toast 或登录,然后检查改造是否得到响应onResponseonFailure

答:

0赞 Elfadil Sulieman 9/16/2022 #1

看来您的响应是 JsonObject,您不需要获取 res,即 JsonObject => 作为 JsonObject。JsonObject res = response.body();

因此,如果您删除此行

 JsonObject rates = res.getAsJsonObject("rates");

并改用 res。我认为这会起作用。