【发布时间】:2018-05-29 01:26:02
【问题描述】:
当我访问由之前调用的其他方法设置的变量时,出现空指针异常。
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() 函数访问。
【问题讨论】:
-
Log是如何声明的? -
slope_db 为空...?
-
看起来您的
slope_db是在异步响应处理程序中分配的。这发生在您致电setData()之后。您应该正确实现异步消息传递 - 等待未来解决。 -
谁投了反对票,请说明理由。
标签: java android nullpointerexception