当前位置: 首页 > 知识库问答 >
问题:

从Volley API获取数据,设置对象值后获取NullPointerException

白淇
2023-03-14

从API获取信息后,我正在parseJson()方法中设置team对象的值。尽管变量team已声明为静态并初始化,并且我在设置数据时使用了this运算符,但在team对象中没有设置数据,当我执行team.getTeamName()时,我会得到java.lang.NullPointerException:println需要一个消息

代码:

public class TeamActivity extends AppCompatActivity {


private RequestQueue queue;
private String teamName;

private static Team team = new Team();

@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.team_activity_layout);

    Intent intent = getIntent();
    teamName = intent.getStringExtra("teamName");

    queue = Volley.newRequestQueue(this);

   
    parseJSON();

    Log.i("Team", this.team.getTeamName());


}

@RequiresApi(api = Build.VERSION_CODES.O)
private void parseJSON(){
    String url = "http://192.168.0.174:8080/team/" + teamName;

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
            (Request.Method.GET, url, null, response -> {

                try {
                        this.team.setId(Long.parseLong(response.getString("id")));
                        this.team.setTeamName(response.getString("teamName"));                            
                        this.team.setTotalMatches(Long.parseLong(response.getString("totalMatches")));
                        this.team.setTotalWins(Long.parseLong(response.getString("totalWins")));

                       
                        }

                } catch (JSONException e) {
                    e.printStackTrace();                      
                }
            }, error -> Log.i("ERROR","Couldn't parse JSON"));

    queue.add(jsonObjectRequest);

}}

共有1个答案

郁隐水
2023-03-14

java.lang.NullPointerException:println需要消息错误意味着team.getTeamName()Null(并且日志正文不能为Null)。这是显而易见的,因为您刚刚在排队请求(parsejson)之后调用log。Volley将对这个请求进行排队,发送它,获得响应,然后用获取的数据(或错误)调用回调。这至少需要几毫秒,因为这是IO异步操作,同时您正在尝试log空数据

在将解析数据设置到静态团队对象之后,将日志调用移动到回调中。然后它就会工作并打印你的名字

this.team.setTeamName(response.getString("teamName"));
Log.i("Team", this.team.getTeamName()); // moved from onCreate

顺便说一句。Team Team可能不应该设置为Static甚至不应该初始化。只要是null,您就会知道您的代码(还没有)提取数据。在回调内部创建tempTeam=new Team();,解析数据并设置为此本地实例。然后检查所有内容是否解析良好,如果是,则将local-callbackteam对象附加到this.team=tempteam;,然后您的日志将“开始工作”

 类似资料:
  • 我有一个名为AnimalsData的文件,它有一个由数组组成的对象。数组由一个对象和另一个数组组成。它看起来像这样: 我的HTML文件如下所示: 我正试图获取的值的类名对象从动画类数组。我一直在使用以下两个stackoverflow页面作为指南: 访问JSON数组中的对象和访问/处理(嵌套)对象、数组或JSON 我有另一个javascript文件,其中包含以下内容: 编辑我将for in循环中的"

  • 我正在尝试编写一个可以搜索对象[]数组的SpEL表达式。下面是一些示例代码: 有谁能帮我写一个SpEL来搜索arr并找到第一个具有属性“bar”的对象并返回bar的值吗? 它的实际应用是,我正在为一个方面编写注释,并试图在注释中声明参数的路径: 非常感谢你的帮助!

  • 我需要在spring批处理作业的步骤中动态设置块大小,该步骤存储在数据库中,即需要从数据库中获取块大小并将其设置到bean中。 我的问题是: 从ID='some_id_param_value'的SOME_TABLE_NAME选择CHUNK_SIZE 在这里,的值将来自作业参数,该参数是通过与请求一起传递到 它无法从访问“chunk”键值,因此引发。是否需要以某种方式对其进行升级,以便可以在step

  • 问题内容: 我正在与集成的android应用程序上工作。我正在使用fql查询从Facebook获取信息。我的fql方法是 myjson对象具有我想要的所有信息。像这样 问题是如何将该信息存储到不同的阵列中? 请为此修改一些代码。 问题答案: 检查http://www.androidhive.info/2012/01/android-json-parsing- tutorial/

  • 我有一个SQL函数,它返回一个对象。 上面返回一个对象,比如 我需要从对象中获取单独的值。

  • } 我想从这个json对象中获取值。 我在下面试过了,但没有成功。