Java 状态变量返回nullPointerException(Android)

Java 状态变量返回nullPointerException(Android),java,android,variables,nullpointerexception,status,Java,Android,Variables,Nullpointerexception,Status,我一直在遵循一个教程(),以使listview显示距离您所在位置最近的餐厅,半径为5公里 然而,我不断得到一个错误,在我的Runnable中,它说状态变量为null。我真的不明白为什么会出现这个错误。你们能给我一个简短的解释并帮我找到解决办法吗 PlacesList.java public class PlacesList implements Serializable { public String status; public List<Place> resul

我一直在遵循一个教程(),以使listview显示距离您所在位置最近的餐厅,半径为5公里

然而,我不断得到一个错误,在我的Runnable中,它说状态变量为null。我真的不明白为什么会出现这个错误。你们能给我一个简短的解释并帮我找到解决办法吗

PlacesList.java

public class PlacesList implements Serializable {

    public String status;
    public List<Place> results;

}
DisplayLocations.java的第132行是:

String status = nearPlaces.status;
这是stacktrace:

 java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.example.dell.exampleapplication.PlacesList.status' on a null object reference
        at com.example.dell.exampleapplication.DisplayLocations$LoadPlaces$1.run(DisplayLocations.java:132)
        at android.app.Activity.runOnUiThread(Activity.java:5517)
        at com.example.dell.exampleapplication.DisplayLocations$LoadPlaces.onPostExecute(DisplayLocations.java:129)
        at com.example.dell.exampleapplication.DisplayLocations$LoadPlaces.onPostExecute(DisplayLocations.java:98)
        at android.os.AsyncTask.finish(AsyncTask.java:632)
        at android.os.AsyncTask.access$600(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:5834)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
任何帮助和解释都将不胜感激

谢谢,祝你今天愉快。

编辑:

nearPlaces.status=。。。(状态:可能来自GooglePlaces)在doInBackGround

然后你可以做:
字符串状态=nearPlaces.status;在onPostExecute中添加行

    @Override
protected String doInBackground(String... params) {
    googlePlaces = new GooglePlaces();

    try{
        String types = "cafe|restaurant";
        double radius = 5000;
        nearPlaces = googlePlaces.search(gps.getLatitude(), gps.getLongitude(), radius, types);
        nearPlaces.status = "OK"; //Add this line for testing, your code should work now, because status is not NULL anymore. 

    }catch (Exception e){
        e.printStackTrace();
    }
    return null;
}

发布完整的PlaceList类。@ImtiyazKhalani,我发布的是完整的PlaceList类。:)从DisplayLocations类发布第132行。您是否获得nearPlaces变量的值?@rajatmehra我添加了该行。Keshav1234 Google Places班一定在帮我处理这个问题。不过看起来好像出了问题。谢谢你的回答。你的评论帮助我找到正确的方向。我加了一个GooglePlaces类,肯定是出了问题。我找不到错误。您可以进一步帮助吗?字符串状态=nearPlaces.status;-->您询问状态,但从未询问过。状态=。。。因此,您希望获得值,但从未设置它。那是你的错,你确定吗?因为在doInBackground中,我有nearPlaces=googlePlaces.search(gps.getLatitude(),gps.getLatitude(),radius,types);这样做对吗?还是我错过了什么?你能告诉我怎么做吗?是的,但是对象nearPlaces的变量状态仍然是空的。。。您的对象不为null,但您的状态为。所以您不能执行字符串status=nearPlaces.status。执行此测试:nearPlaces.status=“OK”;将其放在nearPlaces=…下,如果在公共void运行后查看onPostExecute,则字符串status=nearPlaces.status;谢谢你和我一起思考。但是我没有真正得到问题得到相同的错误,字符串status=nearPlaces.status;这行显然还是空的。多亏了你,我现在才明白这个错误。然而,正如您所说,它现在不应该返回null,因为status=“OK”,但是它仍然返回null:sPlacesList list=request.execute().parseAs(PlacesList.class);//检查日志cat中的位置响应状态log.d(“位置状态”,“列表状态”);这个日志打印出来的是什么?(在您的GooglePlaces类中)在logcat中找不到,抱歉,不知道如何修复它。。。我对地理位置、地图和谷歌地点很陌生。。。还有安卓。
 java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.example.dell.exampleapplication.PlacesList.status' on a null object reference
        at com.example.dell.exampleapplication.DisplayLocations$LoadPlaces$1.run(DisplayLocations.java:132)
        at android.app.Activity.runOnUiThread(Activity.java:5517)
        at com.example.dell.exampleapplication.DisplayLocations$LoadPlaces.onPostExecute(DisplayLocations.java:129)
        at com.example.dell.exampleapplication.DisplayLocations$LoadPlaces.onPostExecute(DisplayLocations.java:98)
        at android.os.AsyncTask.finish(AsyncTask.java:632)
        at android.os.AsyncTask.access$600(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:5834)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
    @Override
protected String doInBackground(String... params) {
    googlePlaces = new GooglePlaces();

    try{
        String types = "cafe|restaurant";
        double radius = 5000;
        nearPlaces = googlePlaces.search(gps.getLatitude(), gps.getLongitude(), radius, types);
        nearPlaces.status = "OK"; //Add this line for testing, your code should work now, because status is not NULL anymore. 

    }catch (Exception e){
        e.printStackTrace();
    }
    return null;
}