Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中访问类变量时,将局部变量的值传递给类变量会给出null指针_Java_Nullpointerexception - Fatal编程技术网

在java中访问类变量时,将局部变量的值传递给类变量会给出null指针

在java中访问类变量时,将局部变量的值传递给类变量会给出null指针,java,nullpointerexception,Java,Nullpointerexception,我得到一个访问令牌作为响应,并尝试将其保存在类变量中。但是当我从getter访问变量时,我会得到null指针异常。下面是代码片段。 我不太明白为什么会这样,因为我正在将局部变量的值赋给类变量。因此,即使变量是私有的,我也应该能够通过类的任何成员方法访问它 public class Login { private String access_token; public String doLogin(String uName) throws Exception { BaseClass bc

我得到一个访问令牌作为响应,并尝试将其保存在类变量中。但是当我从getter访问变量时,我会得到null指针异常。下面是代码片段。 我不太明白为什么会这样,因为我正在将局部变量的值赋给类变量。因此,即使变量是私有的,我也应该能够通过类的任何成员方法访问它

public class Login {
private String access_token;
public String doLogin(String uName) throws Exception {
    BaseClass bc = new BaseClass();
    String loginUrl = "http://www.example.com/login";
    bc.setUrl(loginUrl);
    bc.REQUEST_METHOD="POST";
    bc.CONTENT_TYPE="application/json";
    //System.out.println(url);
    System.out.println(bc.getUrl());
    bc.openConnection();
    bc.con.setDoOutput(true);
    JSONObject loginRequest = new JSONObject();
    loginRequest.put("userName", uName);
    loginRequest.put("password", "password");
    System.out.println(loginRequest);

    DataOutputStream dos = new DataOutputStream(bc.con.getOutputStream());
    dos.writeBytes(loginRequest.toString());
    dos.flush();
    dos.close();
    int responseCode = bc.con.getResponseCode();
    System.out.println(responseCode);
    BufferedReader login = new BufferedReader(new InputStreamReader(bc.con.getInputStream()));
    String inputLine;
    StringBuffer loginResponse = new StringBuffer();
    while((inputLine=login.readLine())!=null){
        loginResponse.append(inputLine);
    }
    login.close();
    System.out.println("#####BEGIN LOGIN RESPONSE#####");
    System.out.println(loginResponse.toString());
    //setAccess_token(access_token);
    JSONObject jobj= new JSONObject(loginResponse.toString());
    JSONArray jArray = jobj.getJSONArray("respList");
    String access_token = jArray.getJSONObject(0).getString("ticket");
    token = jArray.toString();
    //access = new JSONObject(response);
    System.out.println("printing token"+token);
    access_token = token;
    System.out.println("printint access token"+access_token);
    return access_token;
}

public String getToken(){
    System.out.println("printing return token"+access_token);// I GET NULL POINTER EXCEPTION HERE
    return access_token;
}
这就是你的问题:

String access_token = jArray.getJSONObject(0).getString("ticket");
将该行更改为:

this.access_token = jArray.getJSONObject(0).getString("ticket");
请考虑重构。这个方法做了很多工作。

查看变量阴影。“代码墙”——这个方法做得太多了。我会把它分成几个方法,我可以独立测试。