java - 改造响应成功但结果为空

标签 java android gson retrofit

接口(interface):

public interface BabService {

    @GET("bab.php")
    Call<Respon> tampil(@Query("imam") String imam);
}

回复:

public class Respon {

    private String value;
    private List<BabResult> resultBab;

    public String getValue() {
        return value;
    }

    public List<BabResult> getResultBab() { return resultBab; }
}

结果:

public class BabResult {

    private String id_bab;
    private String id_kitab;
    private String bab;

    public String getId_bab() { return id_bab; }

    public String getId_kitab() {
        return id_kitab;
    }

    public String getBab() {
        return bab;
    }
}

适配器:

public class BabAdapter extends RecyclerView.Adapter<BabAdapter.ViewHolder> 

{

    private Context context;
    private List<BabResult> results;
    private String idBab, judulBab;
    private int no;

    public BabAdapter(Context context, List<BabResult> results) {
        this.context = context;
        this.results = results;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_bab, parent, false);
        ViewHolder holder = new ViewHolder(v);

        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        if(position % 2 != 0){
            holder.vBab.setBackgroundResource(R.color.ijo);
        }else{
            holder.vBab.setBackgroundResource(R.color.oren);
        }

        no = position + 1;
        BabResult result = results.get(position);
        idBab = result.getId_bab();
        judulBab = result.getBab();
        holder.tvNo.setText(no);
        holder.tvBab.setText(judulBab);
    }

    @Override
    public int getItemCount() {
        if(results == null){
            return 4;
        }
        return results.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        private View vBab;
        private TextView tvBab, tvNo;

        public ViewHolder(View itemView) {
            super(itemView);
            vBab = (View) itemView.findViewById(R.id.v_bab);
            tvNo = (TextView) itemView.findViewById(R.id.tv_no);
            tvBab = (TextView) itemView.findViewById(R.id.tv_bab);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent i = new Intent(context, HadisList.class);
                    i.putExtra("id", idBab);
                    i.putExtra("bab", judulBab);
                    i.putExtra("no", no);
                    context.startActivity(i);
                }
            });
        }
    }
}

Activity :

public class MenuBab extends AppCompatActivity {

    public static final String URL = "http://mi3bpolinema.000webhostapp.com/";
    private List<BabResult> results = new ArrayList<>();
    private BabAdapter babAdapter;
    private ProgressBar pbLoading;
    private RecyclerView rvBab;
    private TextView tvImam;
    private String imam, namaImam;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu_bab);

        if(getSupportActionBar() != null){
            getSupportActionBar().hide();
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }

        Intent intent = getIntent();
        if(intent != null){
            if(intent.getStringExtra("imam") != null){
                imam = intent.getStringExtra("imam");
                namaImam = intent.getStringExtra("nama");
            }
        }

        pbLoading = (ProgressBar) findViewById(R.id.pb_loading);
        rvBab = (RecyclerView) findViewById(R.id.rv_bab);
        tvImam = (TextView) findViewById(R.id.tv_imam);

        tvImam.setText(namaImam);
        babAdapter = new BabAdapter(this, results);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        rvBab.setLayoutManager(mLayoutManager);
        rvBab.setItemAnimator(new DefaultItemAnimator());
        rvBab.setAdapter(babAdapter);

        loadDataBab();
    }

    @Override
    protected void onResume() {
        super.onResume();
        loadDataBab();
    }

    private void loadDataBab() {
        Retrofit retrofit = new Retrofit
                .Builder()
                .baseUrl(URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        BabService api = retrofit.create(BabService.class);
        Call<Respon> call = api.tampil(imam);
        call.enqueue(new Callback<Respon>() {
            @Override
            public void onResponse(Call<Respon> call, Response<Respon> response) {
                String value = response.body().getValue();
                pbLoading.setVisibility(View.GONE);
                if (value.equals("1")) {
                    results = response.body().getResultBab();
                    babAdapter = new BabAdapter(MenuBab.this, results);
                    rvBab.setAdapter(babAdapter);
                }
            }

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

            }
        });
    }
}

在改造时得到结果为空,但是当我在网站上运行时得到这样的结果:

{"value":1,"result":[{"id_bab":"4","id_kitab":"1","bab":"Wudhu"},
{"id_bab":"8","id_kitab":"1","bab":"Shalat"},
{"id_bab":"15","id_kitab":"1","bab":"Puasa"}]}

使用 this关联。

最佳答案

你需要这样使用模型类 现在你可以得到 API 结果

响应模型类

import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import java.util.ArrayList;

public class Response implements Serializable{

    @SerializedName("value")
    private String value;

    @SerializedName("result")
    private ArrayList<BabResult> resultBab;

    public String getValue() {
        return value;
    }

    public ArrayList<BabResult> getResultBab() {
        return resultBab;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public void setResultBab(ArrayList<BabResult> resultBab) {
        this.resultBab = resultBab;
    }

    public class BabResult {

        @SerializedName("id_bab")
        private String id_bab;

        @SerializedName("id_kitab")
        private String id_kitab;

        @SerializedName("bab")
        private String bab;

        public String getId_bab() {
            return id_bab;
        }
        public void setId_bab(String id_bab) {
            this.id_bab = id_bab;
        }


        public String getId_kitab() {
            return id_kitab;
        }
        public void setId_kitab(String id_kitab) {
            this.id_kitab = id_kitab;
        }


        public String getBab() {
            return bab;
        }
        public void setBab(String bab) {
            this.bab = bab;
        }
    }
}

关于java - 改造响应成功但结果为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48148564/

相关文章:

java - 如何在Java中将2d集合转换为1d?

android - Android Studio 中的列表 fragment

android - Kotlin 数据类 |添加我自己的变量而不是 JSON 键

json - Gson-将嵌套对象序列化为属性

java - 无法使用 GsonConverterFactory 在 Retrofit 2.0 中将子类对象转换为请求正文 json

java - 如何使用 Travis CI 上的构建矩阵设置运行 API 25 的模拟器?

java - java中for元素包含null

android - 多个@Body 字段出错 - retrofit2 beta3

android - 带有 CursorAdapter 的 ListView

java - 从 Tomcat 调用 JBoss 中的 EJB 并将对象作为参数传递