модернизация - как получить ответ от объекта JSON - PullRequest
0 голосов
/ 05 ноября 2018

Мне нужно получить объект JSON по ссылке

http://link/json

и мой обзор JSON

{"as":"AS48159 Telecommunication Infrastructure Company","city":"Ahvāz","country":"Iran","countryCode":"IR","isp":"Information Technology Company (ITC)","lat":31.3167,"lon":48.6844,"org":"khouzestan Telecommunication co","query":"2.185.10.22","region":"","regionName":"Khuzestan","status":"success","timezone":"Asia/Tehran","zip":""}

но я получаю сообщение об ошибкеmainmain.java

Incompatible types.
Required:
retrofit2.Call
<ir.hmotamed.myipnet.Queryip>
Found:
ir.hmotamed.myipnet.Queryip

my seryalize (Queryip.java)

public class Queryip {

    @SerializedName("status")
    private String status;
    @SerializedName("query")
    private String query;
    @SerializedName("country")
    private String country;
    @SerializedName("countryCode")
    private String countryCode;
    @SerializedName("city")
    private String city;
    @SerializedName("timezone")
    private String timezone;
    @SerializedName("isp")
    private String isp;

мой интерфейс (ApiService.java)

import retrofit2.Call;
import retrofit2.http.GET;

public interface ApiService {

    @GET("json")
    Call<Queryip> getQueryip();
}

и mu activitymain.java его

public class ActivityMain extends AppCompatActivity {

    Call<Queryip> queryip;


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

        ApiService service=ApiClient.getClient().create(ApiService.class);
        Call<Queryip> call=service.getQueryip();

        call.enqueue(new Callback<Queryip>() {
            @Override
            public void onResponse(Call<Queryip> Call, Response<Queryip> response) {

                queryip=response.body(); // this line show error

                Toast.makeText(ActivityMain.this, "ok", Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onFailure(Call<Queryip> Call, Throwable t) {
                Toast.makeText(ActivityMain.this, "error", Toast.LENGTH_SHORT).show();
            }
        });

мне нужна помощь для исправления ошибки и получения объекта для просмотра текста танки за помощь!

Ответы [ 4 ]

0 голосов
/ 05 ноября 2018

Просто вам нужно изменить тип глобального объекта с Call на Queryip в вашей деятельностиmain.java тогда в onResponse: Вы можете получить доступ к queryip = response.body ();

0 голосов
/ 05 ноября 2018

Проблема в том, что вы создаете объект Call

Просто создайте объект, как показано ниже

Queryip queryip

и в onSuccess

queryip=response.body();
0 голосов
/ 05 ноября 2018

Здесь ваш фрагмент неправильный.

Ваша глобальная объявленная переменная queryip имеет тип Call<Queryip>:

Call<Queryip> queryip;

Теперь в ответе API вы пытаетесь назначить queryip с response.body(), поэтому вы получаете ошибку.

response.body() вернет объект типа Queryip, но ваша переменная имеет тип Call<Queryip>.

Итак, просто измените объявление вашей переменной с:

Call<Queryip> queryip;

до

Queryip queryip;

Вот так.

0 голосов
/ 05 ноября 2018

response.body(); может быть приведен к вашему классу POJO, т.е. Queryip

Вы назначаете его для ссылки Вызов класса. Вот в чем проблема

Попробуйте:

Queryip q = (Queryip)response.body()

...