Getter返回null

问题描述

我不确定为什么,但是我的movie.getId()getter却为null。在jsonrequest方法中为该方法提供一个值,但是当我尝试使用它时返回null。任何帮助将不胜感激。

Movies movies = new Movies();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        firstMovie = new ArrayList<>();

        recyclerView = findViewById(R.id.recyclerViewId);
        jsonrequest();
        jsonrequest2();

    }

我将数据输入设置器的方法


  public void jsonrequest() {

        request = new JsonObjectRequest(JSON_URL,null,new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {

                JSONObject obj = null;
                try {
                    obj = new JSONObject(response.toString());
                } catch (JSONException e) {
                    e.printstacktrace();
                }
                JSONArray results = null;
                try {
                    results = obj.getJSONArray("results");
                } catch (JSONException e) {
                    e.printstacktrace();
                }

                for (int i = 0; i < results.length(); i++) {

                     movies = new Movies();

                    JSONObject info = null;
                    try {
                        info = results.getJSONObject(i);
                    } catch (JSONException e) {
                        e.printstacktrace();
                    }
                    try {
                        movies.setId(info.getString("id"));
                        movies.setTitle(info.getString("title"));
                        movies.setRelease_date(info.getString("release_date"));
                        movies.setoverview(info.getString("overview"));
                        movies.setPoster_path("https://image.tmdb.org/t/p/w500" + info.getString("poster_path"));
                        movies.setBackdrop_path("https://image.tmdb.org/t/p/w500" + info.getString("backdrop_path"));

                    } 

在此URL中,movies.getId()返回null,但我无法弄清楚。

    private final String JSON_URL2 = "https://api.themoviedb.org/3/movie/" + movies.getId() + "/videos?api_key=";

解决方法

扩大我的评论:您没有共享Movies的代码,但我假设最初的id属性是null

现在看看您的第一个片段:

Movies movies = new Movies();

@Override
protected void onCreate(Bundle savedInstanceState) { ... }

这表明movies是一个实例变量。

现在看看private final String JSON_URL2 = "https://api.themoviedb.org/3/movie/" + movies.getId() + "/videos?api_key=";

再次JSON_URL2是一个实例变量,两者都在创建对象时初始化。 同样,假设两个语句之间没有其他相关的初始化代码movies仍将处于初始状态,即id属性仍为null,因此getId()返回{{ 1}}。

稍后调用null时,只会影响setId(...),但已经计算出movies的值(由于JSON_URL2的值无法更改,不再)。

因此,您需要做的是在尝试使用final之前添加movies.getId()(假设此时JSON_URL2的设置正确),例如通过使用和替换占位符。

示例:

id