Как получить данные json через retrofit 2 и Gson?

323
15 февраля 2018, 14:46

Собственно сам код:

класс активити MainActivity.java

package com.ocean_shop.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import com.ocean_shop.myapplication.POJO.Message;
import java.io.IOException;
import okhttp3.Credentials;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.GET;
public class MainActivity extends AppCompatActivity {
    public static String LOG_TAG = "my_log";
    String username = "USER";
    String password = "PASS";

    public interface MessagesApi {

        @GET("http://MYSERVER/ocean_shop/odata/standard.odata/AccumulationRegister_%D0%9F%D1%80%D0%BE%D0%B4%D0%B0%D0%B6%D0%B8/Turnovers(StartPeriod=datetime'2018-02-06',%20EndPeriod=datetime'2018-02-07')?$format=json;odata=nometadata")
            //Call<S<Message>> getMetadata();
        Call<Message.Value> getTurnover();
        //Call<List<Message>> messages();
    }
    //http://77.34.10.185/ocean_shop/odata/standard.odata/
    private String BASE_URL = "http://MYSERVER/ocean_shop/odata/standard.odata/";

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

        final OkHttpClient okHttpClient = new OkHttpClient().newBuilder().addInterceptor(new Interceptor() {
            @Override
            public okhttp3.Response intercept(Chain chain) throws IOException {
                Request originalRequest = chain.request();
                Request.Builder builder = originalRequest.newBuilder().
                        method("GET", originalRequest.body()).
                        header("Accept-Charset", "UTF-8").
                        header("Authorization", Credentials.basic(username, password));
                Request newRequest = builder.build();
                return chain.proceed(newRequest);
            }
        }).build();

        Retrofit retrofit = new Retrofit.Builder().baseUrl("http://77.34.10.185/ocean_shop/odata/standard.odata/").
                client(okHttpClient).
                addConverterFactory(GsonConverterFactory.create()).
                build();
        MessagesApi messagesApi = retrofit.create(MessagesApi.class);

        Call<Message.Value> messages = messagesApi.getTurnover();
        messages.enqueue(new Callback<Message.Value>() {
            @Override
            public void onResponse(Call<Message.Value> call, Response<Message.Value> response) {
                //log("response.headers() " + response.body());
                if (response.isSuccessful()) {
                    log("result " + String.valueOf(response.body()));
                } else {
                    log("Code " + response.code());
                }
            }
            @Override
            public void onFailure(Call<Message.Value> call, Throwable t) {
            }
        });
    }
    private void log(String s) {
        Log.d(LOG_TAG, s);
    }

}

класс pojo Message.java

package com.ocean_shop.myapplication.POJO;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

import java.util.ArrayList;
import java.util.List;

public class Message {
    /*
    @SerializedName("odata.metadata")
    @Expose
    private String metadata;
    @SerializedName("value")
    @Expose
    private Map<String, ArrayList<Integer> > value;
    public Message(String metadata, Map<String, ArrayList<Integer>> value){
        this.metadata=metadata;
        this.value=value;
    }
    public String getMetadata() {
        return metadata;
    }
    public void setMetadata(String metadata) {
        this.metadata = metadata;
    }
    public Map<String, ArrayList<Integer>> getValue() {
        return value;
    }
    public void setValue(Map<String, ArrayList<Integer>> value) {
        this.value = value;
    }*/
    @SerializedName("odata.metadata")
    @Expose
    private String odataMetadata;
    @SerializedName("value")
    @Expose
    private List<Value> value = null;

    public String getOdataMetadata(){
        return  odataMetadata;
    }
    public void setOdataMetadata(String odataMetadata) {
        this.odataMetadata = odataMetadata;
    }
    public List<Value> getValue() {
        return value;
    }
    public void setValue(List<Value> value){
        this.value = value;
    }
    public class Value {
        @SerializedName("Номенклатура_Key")
        @Expose
        public String номенклатураKey;
        @SerializedName("ХарактеристикаНоменклатуры_Key")
        @Expose
        public String характеристикаНоменклатурыKey;
        @SerializedName("ЗаказПокупателя")
        @Expose
        public String заказПокупателя;
        @SerializedName("ЗаказПокупателя_Type")
        @Expose
        public String заказПокупателяType;
        @SerializedName("ДоговорКонтрагента_Key")
        @Expose
        public String договорКонтрагентаKey;
        @SerializedName("ДокументПродажи")
        @Expose
        public String документПродажи;
        @SerializedName("ДокументПродажи_Type")
        @Expose
        public String документПродажиType;
        @SerializedName("Подразделение_Key")
        @Expose
        public String подразделениеKey;
        @SerializedName("Проект_Key")
        @Expose
        public String проектKey;
        @SerializedName("Организация_Key")
        @Expose
        public String организацияKey;
        @SerializedName("Контрагент_Key")
        @Expose
        public String контрагентKey;
        @SerializedName("КоличествоTurnover")
        @Expose
        public int количествоTurnover;
        /*@SerializedName("СтоимостьTurnover")
        @Expose
        public int стоимостьTurnover;*/
        @SerializedName("СтоимостьTurnover")
        @Expose
        public int Turnover;
        @SerializedName("СтоимостьБезСкидокTurnover")
        @Expose
        public int стоимостьБезСкидокTurnover;
        @SerializedName("НДСTurnover")
        @Expose
        public int НДСTurnover;

        public Integer getTurnover() {
            return Turnover;
        }
        public void setTurnover(Integer Turnover) {
            this.Turnover = Turnover;
        }
    }
}

Примерно то что находиться на сервере JSON

{
"odata.metadata": "http://MYSERVER/ocean_shop/odata/standard.odata/$metadata#Collection(StandardODATA.AccumulationRegister_ПродажиСебестоимость_Turnover)",
"value": [
{
"Номенклатура_Key": "cd1beaa2-eb72-11e7-b49e-3085a93c0618",
"ХарактеристикаНоменклатуры_Key": "00000000-0000-0000-0000-000000000000",
"ЗаказПокупателя": "",
"ЗаказПокупателя_Type": "StandardODATA.Undefined",
"ДокументОприходования": "c04e6bb4-eb77-11e7-8d51-3085a93c0618",
"ДокументОприходования_Type": "StandardODATA.Document_ОприходованиеТоваров",
"Подразделение_Key": "99c2e4c6-a655-11e7-a216-3085a93c0618",
"Проект_Key": "00000000-0000-0000-0000-000000000000",
"КоличествоTurnover": 1,
"СтоимостьTurnover": 2200
},
{
"Номенклатура_Key": "725d9200-9ddf-11e7-a202-3085a93c0618",
"ХарактеристикаНоменклатуры_Key": "00000000-0000-0000-0000-000000000000",
"ЗаказПокупателя": "",
"ЗаказПокупателя_Type": "StandardODATA.Undefined",
"ДокументОприходования": "2d459277-a359-11e7-a211-3085a93c0618",
"ДокументОприходования_Type": "StandardODATA.Document_ОприходованиеТоваров",
"Подразделение_Key": "99c2e4c6-a655-11e7-a216-3085a93c0618",
"Проект_Key": "00000000-0000-0000-0000-000000000000",
"КоличествоTurnover": 1,
"СтоимостьTurnover": 50
},
{
"Номенклатура_Key": "3bb4dcbe-9ddc-11e7-a202-3085a93c0618",
"ХарактеристикаНоменклатуры_Key": "00000000-0000-0000-0000-000000000000",
"ЗаказПокупателя": "",
"ЗаказПокупателя_Type": "StandardODATA.Undefined",
"ДокументОприходования": "31bc57f3-a76b-11e7-a217-3085a93c0618",
"ДокументОприходования_Type": "StandardODATA.Document_ОприходованиеТоваров",
"Подразделение_Key": "99c2e4c6-a655-11e7-a216-3085a93c0618",
"Проект_Key": "00000000-0000-0000-0000-000000000000",
"КоличествоTurnover": 2,
"СтоимостьTurnover": 162
}
]
}

MYSERVER, USER, PASS содержат мои значения

Собственно мне нужно получить значение поля в JSON СтоимостьTurnover примеров в интернете которые я смог разобрать не помогли. Помогите может перестроить запрос или укажите направление для решение задачи.

READ ALSO
Как получить дату изменения каталога в Java

Как получить дату изменения каталога в Java

Как в Java получить FolderlastModified()? Вариант рекурсивного просмотра каталога в глубину и взятие даты последнего файла не подходит, так как каталог...

209
firebird embedded Java

firebird embedded Java

Как указать относительный путь для embedded Firebird? Вот так не работает: jdbc:firebirdsql://localhost/examfdb

210
Android Java Удалить все изображения из listView

Android Java Удалить все изображения из listView

Имеется listView, в который по клику на item добавляется imageПри втором клике на другой item изображение вновь подставляется, а с первого item'a изображение...

226