Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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
Android 改进GSON返回null_Android_Retrofit - Fatal编程技术网

Android 改进GSON返回null

Android 改进GSON返回null,android,retrofit,Android,Retrofit,我正在尝试使用改型来制作一个简单的应用程序,它将解析JSON数组,并获取一些数据,如纬度和经度,但问题是返回null。我是新装修的。请解释你发布的解决方案 这是我的密码 MainActivity.java package com.example.akshay.retrofitgsonjsonarray; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget

我正在尝试使用改型来制作一个简单的应用程序,它将解析JSON数组,并获取一些数据,如纬度和经度,但问题是返回null。我是新装修的。请解释你发布的解决方案

这是我的密码

MainActivity.java

package com.example.akshay.retrofitgsonjsonarray;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import retrofit.Callback;
import retrofit.RestAdapter;
import retrofit.RetrofitError;
import retrofit.client.Response;

public class MainActivity extends AppCompatActivity {
    public final String URL = "https://roads.googleapis.com/v1";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(URL).setLogLevel(RestAdapter.LogLevel.FULL).build();
        api api = restAdapter.create(api.class);
        api.getData(new Callback<SnappedPoints>() {
            @Override
            public void success(SnappedPoints snappedPoints, Response response) {
                Toast.makeText(MainActivity.this ,String.valueOf(snappedPoints.location.getLatitude()) , Toast.LENGTH_LONG ).show();
            }

            @Override
            public void failure(RetrofitError error) {
                Toast.makeText(MainActivity.this, "Something went wrong", Toast.LENGTH_LONG).show();
            }
        });
    }


}
Location.java

package com.example.akshay.retrofitgsonjsonarray;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

/**
 * Created by Akshay on 9/14/2015.
 */
public class Location {


    @SerializedName("latitude")
    @Expose
    Double latitude;
    @SerializedName("longitude")
    @Expose
    Double longitude;

    public void setLatitude(Double latitude) {
        this.latitude = latitude;
    }

    public Double getLatitude() {
        return latitude;
    }

    public void setLongitude(Double longitude) {
        this.longitude = longitude;
    }

    public Double getLongitude() {
        return longitude;
    }
}
api.java

package com.example.akshay.retrofitgsonjsonarray;
import retrofit.Callback;
import retrofit.http.GET;

/**
 * Created by Akshay on 9/8/2015.
 */
public interface api {
    @GET("/snapToRoads?path=-35.27801,149.12958&interpolate=true&key=KEY")
    public void getData( Callback<SnappedPoints> response);
}
package com.example.akshay.gsonjsonarray;
进口改装.回收;
导入reformation.http.GET;
/**
*由Akshay于2015年9月8日创建。
*/
公共接口api{
@GET(“/snapToRoads?path=-35.27801149.12958&interpolate=true&key=key”)
public void getData(回调响应);
}
我试图从中得到经纬度,但没有得到任何结果

这是我的日志:

09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ <--- HTTP 200 https://roads.googleapis.com/v1/snapToRoads?path=-35.27801,149.12958&interpolate=true&key=KEYHERE_Ihavechangedthis (1901ms)
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ : HTTP/1.1 200 OK
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ Alt-Svc: quic=":443"; p="1"; ma=604800
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ Alternate-Protocol: 443:quic,p=1
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ Cache-Control: private
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ Content-Type: application/json; charset=UTF-8
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ Date: Mon, 14 Sep 2015 09:23:17 GMT
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ Server: ESF
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ Transfer-Encoding: chunked
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ Vary: Origin
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ Vary: X-Origin
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ Vary: Referer
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ X-Android-Received-Millis: 1442222595815
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ X-Android-Response-Source: NETWORK 200
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ X-Android-Sent-Millis: 1442222595304
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ X-Content-Type-Options: nosniff
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ X-Frame-Options: SAMEORIGIN
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ X-XSS-Protection: 1; mode=block
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ {
    "snappedPoints": [
    {
    "location": {
    "latitude": -35.278005228392438,
    "longitude": 149.12953569405369
    },
    "originalIndex": 0,
    "placeId": "ChIJp47M1mdNFmsRcF5UbW7qABM"
    }
    ]
    }
09-14 14:53:15.820  19592-19636/com.example.akshay.retrofitgsonjsonarray D/Retrofit﹕ <--- END HTTP (224-byte

09-14 14:53:15.820 19592-19636/com.example.akshay.reformationgsonjsonarray D/reformation﹕  我对改型没有任何线索,但看起来您的api返回了一个值数组,但您试图将其作为标量

请尝试以下操作:

    RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(URL).setLogLevel(RestAdapter.LogLevel.FULL).build();
    api api = restAdapter.create(api.class);
    api.getData(new Callback<SnappedPoints[]>() {
        @Override
        public void success(SnappedPoints[] snappedPoints, Response response) {

            Toast.makeText(MainActivity.this ,String.valueOf(snappedPoints[0].location.getLatitude()) , Toast.LENGTH_LONG ).show();
        }

        @Override
        public void failure(RetrofitError error) {
            Toast.makeText(MainActivity.this, "Something went wrong", Toast.LENGTH_LONG).show();
        }
    });
RestAdapter RestAdapter=new RestAdapter.Builder().setEndpoint(URL).setLogLevel(RestAdapter.LogLevel.FULL).build();
api=restAdapter.create(api.class);
api.getData(新回调函数(){
@凌驾
公共作废成功(快照点[]快照点,响应){
Toast.makeText(MainActivity.this,String.valueOf(snapdpoints[0].location.getLatitude()),Toast.LENGTH_LONG.show();
}
@凌驾
公共无效失败(错误){
Toast.makeText(MainActivity.this,“出错了”,Toast.LENGTH_LONG.show();
}
});

您必须定义一个容器以满足JSON的定义:

public class SnappedPointsContainer {

@SerializedName("snappedPoints")
        @Expose
List<SnappedPoints> snappedPoints;

// TODO Getter & Setter

}
公共类快照点容器{
@SerializedName(“快照点”)
@暴露
列出捕捉点;
//托多·盖特和塞特
}
并将改装界面更改为:

public interface api {
    @GET("/snapToRoads?path=-35.27801,149.12958&interpolate=true&key=KEY")
    public void getData( Callback<SnappedPointsContainer> response);
}
公共接口api{
@GET(“/snapToRoads?path=-35.27801149.12958&interpolate=true&key=key”)
public void getData(回调响应);
}
按以下方式定义回调:

api.getData(new Callback<SnappedPointsContainer>() {
    @Override
    public void success(SnappedPointsContainer snappedPointsContainer, Response response) {
        // TODO Process e.g. snappedPointsContainer.getSnappedPoints()
    }

    @Override
    public void failure(RetrofitError error) {
        Toast.makeText(MainActivity.this, "Something went wrong", Toast.LENGTH_LONG).show();
    }
});
api.getData(新回调(){
@凌驾
公共无效成功(快照点容器快照点容器,响应){
//TODO流程,例如SnapedPoints Container.GetSnapedPoints()
}
@凌驾
公共无效失败(错误){
Toast.makeText(MainActivity.this,“出错了”,Toast.LENGTH_LONG.show();
}
});

我认为您需要一个包含SnapedPoints的POJO类扫描您请向我提供您的响应字符串我确实有一个SnapedPoints类您能告诉我如何创建一个SnapedPoints数组,如您在此处提到的[…]。。我有点困惑,我的答案有点错误,你需要POJO类来保存捕捉点的数组。请参考@Christoper的回答列表和要点;SnapsdPoints课程在哪里。。在那个类中我应该做什么?您已经定义了那个类。做和以前一样的事情。你能告诉我在成功中获得纬度和经度应该做什么吗()你说的是SnapdPoints Container.GetSnapdPoints()它正在返回[com.example.akshay.ReformationSonJSonarray]。SnappedPoints@12915fb4]我定义的容器返回快照点列表。所以你应该反复浏览这个列表。对于每个列表项,您可以通过例如第一个项的snapdpoints container.getsnapdpoints.get(0).getLocation()来获取位置。
api.getData(new Callback<SnappedPointsContainer>() {
    @Override
    public void success(SnappedPointsContainer snappedPointsContainer, Response response) {
        // TODO Process e.g. snappedPointsContainer.getSnappedPoints()
    }

    @Override
    public void failure(RetrofitError error) {
        Toast.makeText(MainActivity.this, "Something went wrong", Toast.LENGTH_LONG).show();
    }
});