【问题标题】:Android Retrofit no response安卓改造无反应
【发布时间】:2016-11-14 10:12:48
【问题描述】:

您好,我刚接触改造服务并遵循本教程 https://www.simplifiedcoding.net/retrofit-android-tutorial-to-get-json-from-server/ 它运行良好,并想创建我自己的,所以我使用了一个新的 json 网络 http://api.androidhive.info/contacts/ 包含

{
"contacts": [
    {
            "id": "c200",
            "name": "Ravi Tamada",
            "email": "ravi@gmail.com",
            "address": "xx-xx-xxxx,x - street, x - country",
            "gender" : "male",
            "phone": {
                "mobile": "+91 0000000000",
                "home": "00 000000",
                "office": "00 000000"
            }
    },
    {
            "id": "c201",
            "name": "Johnny Depp",
            "email": "johnny_depp@gmail.com",
            "address": "xx-xx-xxxx,x - street, x - country",
            "gender" : "male",
            "phone": {
                "mobile": "+91 0000000000",
                "home": "00 000000",
                "office": "00 000000"
            }
    },
    {
            "id": "c202",
            "name": "Leonardo Dicaprio",
            "email": "leonardo_dicaprio@gmail.com",
            "address": "xx-xx-xxxx,x - street, x - country",
            "gender" : "male",
            "phone": {
                "mobile": "+91 0000000000",
                "home": "00 000000",
                "office": "00 000000"
            }
    },
    {
            "id": "c203",
            "name": "John Wayne",
            "email": "john_wayne@gmail.com",
            "address": "xx-xx-xxxx,x - street, x - country",
            "gender" : "male",
            "phone": {
                "mobile": "+91 0000000000",
                "home": "00 000000",
                "office": "00 000000"
            }
    },
    {
            "id": "c204",
            "name": "Angelina Jolie",
            "email": "angelina_jolie@gmail.com",
            "address": "xx-xx-xxxx,x - street, x - country",
            "gender" : "female",
            "phone": {
                "mobile": "+91 0000000000",
                "home": "00 000000",
                "office": "00 000000"
            }
    },
    {
            "id": "c205",
            "name": "Dido",
            "email": "dido@gmail.com",
            "address": "xx-xx-xxxx,x - street, x - country",
            "gender" : "female",
            "phone": {
                "mobile": "+91 0000000000",
                "home": "00 000000",
                "office": "00 000000"
            }
    },
    {
            "id": "c206",
            "name": "Adele",
            "email": "adele@gmail.com",
            "address": "xx-xx-xxxx,x - street, x - country",
            "gender" : "female",
            "phone": {
                "mobile": "+91 0000000000",
                "home": "00 000000",
                "office": "00 000000"
            }
    },
    {
            "id": "c207",
            "name": "Hugh Jackman",
            "email": "hugh_jackman@gmail.com",
            "address": "xx-xx-xxxx,x - street, x - country",
            "gender" : "male",
            "phone": {
                "mobile": "+91 0000000000",
                "home": "00 000000",
                "office": "00 000000"
            }
    },
    {
            "id": "c208",
            "name": "Will Smith",
            "email": "will_smith@gmail.com",
            "address": "xx-xx-xxxx,x - street, x - country",
            "gender" : "male",
            "phone": {
                "mobile": "+91 0000000000",
                "home": "00 000000",
                "office": "00 000000"
            }
    },
    {
            "id": "c209",
            "name": "Clint Eastwood",
            "email": "clint_eastwood@gmail.com",
            "address": "xx-xx-xxxx,x - street, x - country",
            "gender" : "male",
            "phone": {
                "mobile": "+91 0000000000",
                "home": "00 000000",
                "office": "00 000000"
            }
    },
    {
            "id": "c2010",
            "name": "Barack Obama",
            "email": "barack_obama@gmail.com",
            "address": "xx-xx-xxxx,x - street, x - country",
            "gender" : "male",
            "phone": {
                "mobile": "+91 0000000000",
                "home": "00 000000",
                "office": "00 000000"
            }
    },
    {
            "id": "c2011",
            "name": "Kate Winslet",
            "email": "kate_winslet@gmail.com",
            "address": "xx-xx-xxxx,x - street, x - country",
            "gender" : "female",
            "phone": {
                "mobile": "+91 0000000000",
                "home": "00 000000",
                "office": "00 000000"
            }
    },
    {
            "id": "c2012",
            "name": "Eminem",
            "email": "eminem@gmail.com",
            "address": "xx-xx-xxxx,x - street, x - country",
            "gender" : "male",
            "phone": {
                "mobile": "+91 0000000000",
                "home": "00 000000",
                "office": "00 000000"
            }
    }
]

我实现了自己的接口 ContactAPI.java

public interface ContactsAPI {
@GET("/contacts/")
public void getContacts(Callback<List<Contact>> response);}

并像 Contact.java 这样实现了模型类

public class Contact {

@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("email")
@Expose
private String email;
@SerializedName("address")
@Expose
private String address;
@SerializedName("gender")
@Expose
private String gender;
public String getId() {return id;}
public void setId(String id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getEmail() {return email;}
public void setEmail(String email) {this.email = email;}
public String getAddress() {return address;}
public void setAddress(String address) {this.address = address;}
public String getGender() {return gender;}
public void setGender(String gender) {this.gender = gender;}}

然后终于在 MainActivity.class 中实现了我的 Restadapter

  public static final String ROOT_URL = "http://api.androidhive.info";
  private ListView listView;
  private List<Contact> contacts;
   RestAdapter adapter = new RestAdapter.Builder().setEndpoint(ROOT_URL).build();
    ContactsAPI api = adapter.create(ContactsAPI.class);

    api.getContacts(new Callback<List<Contact>>() {
        @Override
        public void success(List<Contact> list, Response response) {
            Toast.makeText(MainActivity.this,list.toString(),Toast.LENGTH_SHORT).show();
            showList();
        }

        @Override
        public void failure(RetrofitError error) {
            //you can handle the errors here
            Toast.makeText(MainActivity.this,"Error Occured:"+error.toString(),Toast.LENGTH_SHORT).show();
        }
    });

应用程序运行顺利,但延迟 4 秒后,它会提示一个错误,即 public void failure(RetrofitError 错误)我不知道我错过了什么我检查了我的代码并且找不到任何错误请帮助我谢谢提前。

【问题讨论】:

  • 错误信息是什么?
  • 知道错误肯定会有所帮助。您是否在清单中拥有互联网权限?
  • @Juvi - 这是日志 E/Surface 的错误:getSlotFromBufferLocked: unknown buffer: 0xaa9ef1b0
  • @Blackbelt - 是的,我确实拥有清单的互联网权限,并且我在 E/Surface 中的错误日志:getSlotFromBufferLocked: unknown buffer: 0xaa9ef1b0
  • 这是一个known issue,Android 6.0。已在 6.0.1 中修复

标签: java android json rest retrofit


【解决方案1】:

如果 json 是这个,你需要一个类:

public class Contacts {
    @SerializedName("contacts")
    @Expose
    private List<Contact> contacts = new ArrayList<Contact>();

    /**
     *
     * @return
     * The contacts
     */
    public List<Contact> getContacts() {
        return contacts;
    }

    /**
     *
     * @param contacts
     * The contacts
     */
    public void setContacts(List<Contact> contacts) {
        this.contacts = contacts;
    }

}

也在你的接口 ContactAPI.java 中

public interface ContactsAPI {
    @GET("/contacts/")
    public void getContacts(Callback<Contacts> response);
}

还要检查这个链接,因为“+”有问题,这个error

【讨论】:

  • 感谢您的回复先生,但给定代码 yog 给我的唯一结果是“Contact@824ec91”我错过了什么吗?
  • 好的,现在我明白了,您提供 Contacts 类的原因是为对象提供一个列表,然后我需要使用我的 Contact 类将对象的参数调用给我的朋友和您将我的开发时间减半谢谢!干杯!
猜你喜欢
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 2022-01-01
  • 2014-06-23
  • 2020-12-22
  • 1970-01-01
相关资源
最近更新 更多