【发布时间】:2019-09-30 17:52:12
【问题描述】:
我是 Android 新手。我尝试使用 retrofit2 在 android 中获取 json 数据,它显示 "connect time out" 并且什么也不显示。如果我与其他一些其他 api 一起使用相同的代码,它工作正常。 请帮我解决这个问题。提前谢谢你。
这是我的 MainActivity.java 类:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.List;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends AppCompatActivity {
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listViewHeroes);
getUsers();
}
public void getUsers(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Api.BASE_URL)
.addConverterFactory(GsonConverterFactory.create()) //Here we are using the GsonConverterFactory to directly convert json data to object
.build();
Api api = retrofit.create(Api.class);
System.out.println("api:"+api);
Call<List<User>> call = api.getUsers();
Log.i("inside main","method..");
call.enqueue(new Callback<List<User>>() {
@Override
public void onResponse(Call<List<User>> call, Response<List<User>> response) {
List<User> userList = response.body();
Log.i("hello ..","hi");
String[] users = new String[userList.size()];
for (int i = 0; i < userList.size(); i++) {
users[i] = userList.get(i).getName();
Log.i("User name is :"+users[i],"User list");
listView.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, users));
}
}
@Override
public void onFailure(Call<List<User>> call, Throwable t) {
Log.i("fail","fail..");
Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
API 接口
import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;
public interface Api {
String BASE_URL = "http://192.168.1.8:8083/FarmerWebApplication/";
@GET("getUsers")
Call<List<User>> getUsers();
}
User.java 类
import com.google.gson.annotations.SerializedName;
public class User {
@SerializedName("uname")
private String name;
private String address;
public User(String name, String address) {
this.name = name;
this.address = address;
}
public String getName(){
return name;
}
public String getAddress() {
return address;
}
以下是我想使用 http://192.168.1.8:8083/FarmerWebApplication/getUsers api 获取的 json 响应。 192.168.1.8是我的系统ip地址。
[
{
"uid": 1,
"uname": "amit",
"uaddress": "Bangalore"
},
.....
]
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/listViewHeroes"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>
如果需要更多详细信息,请随时询问。谢谢。
【问题讨论】:
-
复制浏览器中的 url 并检查它是否给出正确的 json 响应,如果是,请尝试像这样增加改造超时 >>stackoverflow.com/questions/29380844/…
-
@NavneetKrishna 感谢您的快速回复。我试过你的解决方案。甚至我也遇到了同样的问题。
标签: java android json retrofit2