Android Json解析与改进

Android Json解析与改进,android,json,retrofit2,Android,Json,Retrofit2,我第一次使用改型,我想解析一些json数据,但我可能在MainActivity上启动网络请求时出错。应用程序不会崩溃,但不会返回任何值。这是一个Gridlayout,每个项上都有一个OnclickListener,我只想返回2个值(name和Id)。对象当前有3项(名称、id和列表)。这是完整的API端点“” public类MainActivity扩展了AppCompatActivity实现 CakeAdapter.CakeClickedListener{ 回收视图mRecyclerView;

我第一次使用改型,我想解析一些json数据,但我可能在MainActivity上启动网络请求时出错。应用程序不会崩溃,但不会返回任何值。这是一个Gridlayout,每个项上都有一个OnclickListener,我只想返回2个值(name和Id)。对象当前有3项(名称、id和列表)。这是完整的API端点“”

public类MainActivity扩展了AppCompatActivity实现
CakeAdapter.CakeClickedListener{
回收视图mRecyclerView;
文本视图mCakeName;
图像视图mCakeImage;
TextView-mCakeId;
private List mCakeList=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView=findviewbyd(R.id.cake\u list\u recycler\u view);
mRecyclerView.setHasFixedSize(true);
GridLayoutManager mGridLayoutManager=新的GridLayoutManager(MainActivity.this,2);
最终CakeAdapter mCakeAdapter=新CakeAdapter(本);
mRecyclerView.setLayoutManager(mGridLayoutManager);
mRecyclerView.setAdapter(mCakeAdapter);
getCakeData(mCakeList);
改装改装=新改装.Builder()
.baseUrl(常量.BASE\u URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
BakingJsonApi BakingJsonApi=reformation.create(BakingJsonApi.class);
Call Call=bakingJsonApi.getCakes(Constants.JSON_PATH);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
如果(!response.issusccessful()){
Toast.makeText(MainActivity.this,“代码:+response.Code(),Toast.LENGTH\u SHORT.show();
回来
}
List-cakeItem=response.body();
getCakeData(cakeItem);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(MainActivity.this,“无法加载数据”+t.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}
公共接口BakingJsonApi{
@GET(“/topher/2017/May/59121517_baking/{json}”)
调用getCakes(@Path(“json”)字符串路径);
}
类常数{
静态最终字符串烘焙_API=”https://d17h27t6h515a5.cloudfront.net/topher/2017/May/59121517_baking/baking.json";
静态最终字符串BASE_URL=”https://d17h27t6h515a5.cloudfront.net/";
静态最终字符串JSON_PATH=“baking.JSON”;
}

尝试更改此条件:

如果(!response.issusccessful()){

对于类似t的东西:

if(response.isSuccessful()){
                Modelcake respuesta = response.body();
                listcake.addAll(respuesta.getcake()); //in getcake() you get what are you want in your model
                adapter.notifyDataSetChanged();

            }else{
                Log.e("API","onResponse"+response.errorBody());
            }

这应该是可行的。

也许更新回收器适配器可以工作。我还修改了您的条件

call.enqueue(new Callback<List<CakesItem>>() {
    @Override
    public void onResponse(Call<List<CakesItem>> call, Response<List<CakesItem>> response) {
        if (response.isSuccessful()) {
          mCakeList = new ArrayList();
          mCakeList.addAll(response.body());
          mCakeAdapter.notifyDataSetChanged();
        }

    }

    @Override
    public void onFailure(Call<List<CakesItem>> call, Throwable t) {

        Toast.makeText(MainActivity.this, "Unable to load data" + t.getMessage(), Toast.LENGTH_SHORT).show();
    }
});
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()){
mCakeList=newarraylist();
addAll(response.body());
mCakeAdapter.notifyDataSetChanged();
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(MainActivity.this,“无法加载数据”+t.getMessage(),Toast.LENGTH_SHORT).show();
}
});

notifyDataSetChange已在适配器中声明。如果您想查看它的总体概述,可以看一看……请执行我定义的方法,然后让我知道。很抱歉,答复太晚了。我还需要正确使用序列化名称。
call.enqueue(new Callback<List<CakesItem>>() {
    @Override
    public void onResponse(Call<List<CakesItem>> call, Response<List<CakesItem>> response) {
        if (response.isSuccessful()) {
          mCakeList = new ArrayList();
          mCakeList.addAll(response.body());
          mCakeAdapter.notifyDataSetChanged();
        }

    }

    @Override
    public void onFailure(Call<List<CakesItem>> call, Throwable t) {

        Toast.makeText(MainActivity.this, "Unable to load data" + t.getMessage(), Toast.LENGTH_SHORT).show();
    }
});