【发布时间】:2017-05-08 07:30:13
【问题描述】:
我正在学习改造,我只是想将 json 转换为 gson。可能是因为我不熟悉链接的json格式的结构。我尝试了另一个格式更简单的链接,并且该应用程序有效。我想查询“数据”中的内容。我希望你能给我一些建议并找出问题所在。顺便说一句,我为这两个链接制作了单独的应用程序。但过程类似。
这是我应该使用的链接:
这里是教程给出的链接
这是我的界面:
public interface HTTPService {
@GET("/organizations?type=json")
Call<Organization> getMyJSON();
}
这是我的客户:
public class HTTPClient {
private static final String ROOT_URL = "http://isteward.tastradedev.com/api";
/**
* Get Retrofit Instance
*/
private static Retrofit getRetrofitInstance() {
return new Retrofit.Builder()
.baseUrl(ROOT_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
/**
* Get API Service
*
* @return API Service
*/
public static HTTPService getApiService() {
return getRetrofitInstance().create(HTTPService.class);
}
}
这是我的 MainActivity:
public class MainActivity extends AppCompatActivity {
private ListView listView;
private View parentView;
private ArrayList<Datum> datalist;
private ListAdapter adapter;
ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
datalist = new ArrayList<>();
parentView = findViewById(R.id.parentlayout);
listView = (ListView) findViewById(R.id.listView);
dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle("Fetching Data");
dialog.setMessage("Please wait...");
dialog.show();
//Creating an object of our api interface
HTTPService api = HTTPClient.getApiService();
Call<Organization> call = api.getMyJSON();
call.enqueue(new Callback<Organization>() {
@Override
public void onResponse(Call<Organization> call, Response<Organization> response) {
//Dismiss Dialog
dialog.dismiss();
if (response.isSuccessful()) {
datalist = response.body().getData();
adapter = new ListAdapter(MainActivity.this, datalist);
listView.setAdapter(adapter);
} else {
Toast.makeText(MainActivity.this, "error", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Organization> call, Throwable t) {
}
});
}
}
我已经使用 jsonschema2pojo 生成了这些类。 该链接由 3 个类组成。我想这会使我的帖子太长。感谢您的帮助。
编辑:我想我必须包括我的适配器
这是我的适配器的一些部分:
public class ListAdapter extends ArrayAdapter<Datum> {
ArrayList<Datum> datalist;
Context context;
private LayoutInflater inflater;
public ListAdapter(Context context, ArrayList<Datum> objects) {
super(context, 0, objects);
this.context = context;
this.inflater = LayoutInflater.from(context);
datalist = objects;
}
@Override
public Datum getItem(int position) {
return datalist.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder vh;
if (convertView == null) {
View view = inflater.inflate(R.layout.row, parent, false);
vh = ViewHolder.create((RelativeLayout) view);
view.setTag(vh);
} else {
vh = (ViewHolder) convertView.getTag();
}
【问题讨论】:
-
尝试使用 okhttp HttpLoggingInterceptor 调试来自服务器的响应。
-
Android Monitor 中必须有 log cat 条目。请把它贴在这里,我们需要检查它。
-
here Call
您正在从服务器获取组织,但 api 显示它是子级。如果您从 jsonschema2pojo 生成类,则使用 Example class 。像调用 -
@DivyeshPatel 感谢先生的解释。我现在明白了。但是,我怎样才能获取“基准”类中的数据,因为“示例”类中没有进程,与具有“getData()”的“组织”类不同?
-
您的 json 是嵌套的,因此使用 Call
使用整个 json 作为响应,然后在 datalist = response.body().getData();使用 datalist = response.body().getOrganisation.getData();
标签: android json retrofit retrofit2 gson