获取java.lang.NullPointerException:println需要一条消息



当我访问之前调用的其他方法设置的变量时,我收到空指针异常。

import android.util.Log;
public class StartActivity extends AppCompatActivity {
String lat, longi;
String soil_depth_db,soil_type_db,lulc_type_db,district_db;
String slope_db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lat = getIntent().getExtras().get("Latitude").toString();
longi = getIntent().getExtras().get("Longitude").toString();
getData(lat, longi);
setData();
}
private void setData(){
Log.d("index",slope_db);
}

private void  getData(String lat, String longi){
String URL = "http://10.129.133.157/test.php?x="+longi+"&y="+lat;
Log.d("URL",URL);
StringRequest stringRequest = new StringRequest(com.android.volley.Request.Method.GET, URL,
new com.android.volley.Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
Log.d("JSON",response);
JSONObject jsonObj = new JSONObject(response);
if(jsonObj.get("slope").equals(null))
slope_db = "1.0" ;
else
slope_db = (String) jsonObj.get("slope");
Log.d("slope",slope_db);

} catch (Exception e) {
e.printStackTrace();
}
}
},
new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("TAG error","error occured"+error.toString());
}
}
);
stringRequest.setRetryPolicy(new DefaultRetryPolicy(100000000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);

}

当我在 setData(( 中注释行Log.d("index",slope_db);时,它可以正常工作,否则它会给出 NullPointer 错误。因此,从服务器获取数据的 gatData 中设置的值不会被 SetData(( 函数访问。

Volley 正在异步执行。slope_db在首次完成字符串请求之前未设置。getData()在设置slope_db之前完成,setData()getData()完成后立即执行。不要依赖异步调用来初始化主线程上需要的数据,永远无法保证数据在需要之前就已初始化。

要么初始化slope_db字段(例如。String slope_db = "";(,或者在确定异步调用已初始化之前不要使用slope_db

字符串是 Java 中的一个对象,所以如果你尝试打印"未初始化的字符串",程序将NullPointerException出现。

发生onCreate()事件时,slope_db为空。

这是示例

String test;
System.out.println(test); //Complie error because not initialized
test = "";
System.out.println(test); //Ok

相关内容

最新更新