我搜索了类似的问题,但不幸的是,我发现他们真的很困惑,而且我仍然是使用Android和Retrofit的新手。
我这里有一个联系人列表JSON
http://api.androidhive.info/contacts/
然后我想把Retrofit过程处理到另一个类,这样我就可以随时调用它了。我有调用UI的MainActivity和处理成功和失败方法的RetrofitHandler。
这是我的主要活动
public class MainActivity extends AppCompatActivity{
//note i just simplifiend my code a little
private List<Contacts> contacts;
public String[] itemer;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RetrofitHandler retrofitHandler = new RetrofitHandler();
itemer = retrofitHandler.getContacts(this);
if (itemer != null) {
Toast.makeText(MainActivity.this,itemer[0],Toast.LENGTH_SHORT).show();
}
}
这是我的HandlerClass
ublic class RetrofitHandler {
public String[] item;
public static final String ROOT_URL = "http://api.androidhive.info";
public List<Contacts> contacts;
public String[] getContacts(final Context context) {
final ProgressDialog loading = ProgressDialog.show(context, "Fetching Data", "Please wait...", false, false);
RestAdapter adapter = new RestAdapter.Builder().setEndpoint(ROOT_URL).build();
ContactsAPI api = adapter.create(ContactsAPI.class);
api.getContacts(new Callback<Contacts>() {
@Override
public void success(Contacts contacts, Response response) {
loading.dismiss();
MainActivity update = new MainActivity();
List<Contact> contactList = contacts.getContacts();
item = new String[contactList.size()];
for (int i = 0; i < contactList.size(); i++) {
item[i] = contactList.get(i).getName();
}
}
@Override
public void failure(RetrofitError error) {
Toast.makeText(context, "Error Occured", Toast.LENGTH_LONG).show();
}
});
return item;
}
我的问题是,它在LogCat上运行得很流畅,没有错误。不幸的是,主活动上的Toast不会出现。
发布于 2016-07-30 06:24:28
您的问题是因为请求/响应的异步特性。成功或失败回调在响应时触发,这是以异步方式发生的。所以基本上,在此之前你的方法返回,这意味着你的项目是空的。你必须使用同步机制,或者你必须检查MVP pattern,它为你的问题提供了完美的解决方案。下面是一个使用同步调用的示例(我还没有测试过它,但它应该可以工作)。
public List<Contacts> getContacts(){
RestAdapter adapter = new RestAdapter.Builder().setEndpoint(ROOT_URL).build();
ContactsAPI api = adapter.create(ContactsAPI.class);
return api.getContacts();
}
查看此tutorial了解更多信息。我建议你迁移到更新换代2,它比更新换代1要好得多。
https://stackoverflow.com/questions/38586075
复制相似问题