【问题标题】:Android Retrofit simple usage errorAndroid Retrofit简单使用错误
【发布时间】:2015-10-23 04:05:50
【问题描述】:

重用了一些来自教程的内容来让 Retrofit 工作。这些是关键类。 主要活动 包 com.example.jc.retrofittest;

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

import com.example.jc.retrofittest.POJO.Model;

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

public class MainActivity extends AppCompatActivity {

    TextView city, status, humidity, pressure;
    String url = "http://www.seecroatia.com/croatiamaps";


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

        city = (TextView) findViewById(R.id.txt_city);
        status = (TextView) findViewById(R.id.txt_status);
        humidity = (TextView) findViewById(R.id.txt_humidity);
        pressure = (TextView) findViewById(R.id.txt_press);
        //making object of RestAdapter
        RestAdapter adapter = new RestAdapter.Builder().setEndpoint(url).build();
        city.setText(adapter.toString());
        //Creating Rest Services
        RestInterface restInterface = adapter.create(RestInterface.class);

                //Calling method to get whether report
                restInterface.getWheatherReport(new Callback<Model>() {


                    @Override
                    public void success(Model model, Response response) {
                        city.setText("jur1e");
                        // status.setText("Status :"+model.getTyopInfo());

                    }

                    @Override
                    public void failure(RetrofitError error) {
                        city.setText("greska");
                        String merror = error.getMessage();
                    }
                });

    }


}

模型.java

public class Model {

    public Model() {
    }

    public Model(int idInfo, int typeInfo) {
        this.idInfo = idInfo;
        this.typeInfo = typeInfo;
    }

    public int getIdInfo() {
        return idInfo;
    }

    public void setIdInfo(int idInfo) {
        this.idInfo = idInfo;
    }

    public int getTypeInfo() {
        return typeInfo;
    }

    public void setTypeInfo(int typeInfo) {
        this.typeInfo = typeInfo;
    }

    private int idInfo;
    private int typeInfo;

}

休息接口

public interface RestInterface {

    @GET("/getMarker.php")
    void getWheatherReport(Callback<Model> cb);

}

酒店

public class Hotel {
    private String idHotel;
    private String pbr;
    private String mjesto;
    private String naziv;
    private String adresa;
    private String web;
    private String email;
    private String latitude;
    private String longitude;
    public Hotel() {
    }



    public Hotel(String idHotel, String pbr, String mjesto, String naziv, String adresa, String web, String email, String latitude, String longitude) {
        this.idHotel = idHotel;
        this.pbr = pbr;
        this.mjesto = mjesto;
        this.naziv = naziv;
        this.adresa = adresa;
        this.web = web;
        this.email = email;
        this.latitude = latitude;
        this.longitude = longitude;
    }





    public String getIdHotel() {
        return idHotel;
    }

    public void setIdHotel(String idHotel) {
        this.idHotel = idHotel;
    }

    public String getPbr() {
        return pbr;
    }

    public void setPbr(String pbr) {
        this.pbr = pbr;
    }

    public String getMjesto() {
        return mjesto;
    }

    public void setMjesto(String mjesto) {
        this.mjesto = mjesto;
    }

    public String getNaziv() {
        return naziv;
    }

    public void setNaziv(String naziv) {
        this.naziv = naziv;
    }

    public String getAdresa() {
        return adresa;
    }

    public void setAdresa(String adresa) {
        this.adresa = adresa;
    }

    public String getWeb() {
        return web;
    }

    public void setWeb(String web) {
        this.web = web;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getLatitude() {
        return latitude;
    }

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

    public String getLongitude() {
        return longitude;
    }

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


}

我的代码总是在 Mainactivity 中失败。请给点建议?

【问题讨论】:

  • 请问你能比“失败”更具体吗?例如,你能提供一个异常堆栈跟踪吗?
  • 我猜你没有 ResultsDeserializer 来调整接收到的数据到你的模型。发布您的日志输出以查看您遇到的错误。
  • 现在 gettint java.Lang.IllegalStateException: 应为 BEGIN_OBJECT 但为 BEGIN_ARRAY。显然,我正在尝试获取它驻留在服务器上的不同 JSON 格式。我的 Model 类包含我从 Web 服务收集的两个整数,但我接收它的方式有问题。

标签: android retrofit


【解决方案1】:

现在得到 java.Lang.IllegalStateException: Expected BEGIN_OBJECT 但是 是 BEGIN_ARRAY。显然我正在尝试获得不同的 JSON 格式 它驻留在服务器上。我的模型类包含两个整数,我是 从网络服务收集,但我的方式有问题 收到了。

端点返回的是JSONArray,而不是JSONObject。你的

Callback&lt;Model&gt; 应该是Callback&lt;List&lt;Model&gt;&gt;

您还必须更改您的模型类。 idInfotypeInfo 返回为 String 而不是 int

【讨论】:

  • 非常感谢。我还有一个问题?如何使用此更改此代码从不同的 PHP 脚本获取 JSON。在这种情况下,它是从 getMarker.php 获取的,但我想从 MainActivity 发送脚本名称并一直使用相同的界面?我需要做出哪些改变?
  • 我不确定您的意思,但请查看this example out
  • 我的域的静态部分是 www.xyz.com...我希望能够从不同的脚本(如 getMarker1.php、getMarker2.php)获取数据并设置“动态”部分MainActivity 中的 URL...
  • 您将不得不向您的RestInterface 添加另一种方法。例如。 @GET("/getMarke2r.php") void getMarkers(Callback&lt;Model&gt; cb);`
  • 我现在得到了不同的错误,预期 BEGIN_ARRAY 但是字符串...我的 Web 服务是相同的,模型类包含整数,回调需要数组。请帮忙
猜你喜欢
  • 2019-04-17
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
相关资源
最近更新 更多