改造-如何从json对象获取响应

时间:2018-11-05 07:30:47

标签: java android json retrofit retrofit2

我需要在链接中获取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":""}

但是我在activitymain.java中出错

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

我推荐(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 :(得分:1)

response.body();可以强制转换为您的POJO类,即Queryip

您将其分配给参考 Call 类。这就是这里的问题

尝试:

Queryip q = (Queryip)response.body()

答案 1 :(得分:0)

问题是您创建呼叫对象

只需创建以下对象

Queryip queryip

和onSuccess

queryip=response.body();

答案 2 :(得分:0)

这是您的代码段错误的地方。

您的全局声明变量queryip的类型为Call<Queryip>

Call<Queryip> queryip;

现在,在api响应中,您尝试将queryip分配给response.body(),这就是为什么会出错的原因。

response.body()将返回类型为Queryip的对象,但您的变量的类型为Call<Queryip>

因此,只需从以下位置重构变量声明即可:

Call<Queryip> queryip;

Queryip queryip;

就这样。

答案 3 :(得分:0)

仅需在activitymain.java中将全局对象类型从Call更改为Queryip。 然后在onResponse中: 您可以访问queryip = response.body();