改进响应成功但是结果为null

时间:2018-01-08 10:38:53

标签: java android gson retrofit

接口:

public interface BabService {

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

Respon:

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);
                }
            });
        }
    }
}

的活动:

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) {

            }
        });
    }
}

在改造时获得结果为null,但是当我在网站上运行时得到如下结果:

{"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链接。

4 个答案:

答案 0 :(得分:1)

您需要以这种方式使用Model类 现在您可以获得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;
        }
    }
}

答案 1 :(得分:0)

回复课程

public class Respon 
{
private ArrayList<Result> result;

private String value;

public  ArrayList<Result> getResult ()
{
    return result;
}

public void setResult ( ArrayList<Result> result)
{
    this.result = result;
}

public String getValue ()
{
    return value;
}

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

@Override
public String toString()
{
    return "ClassPojo [result = "+result+", value = "+value+"]";
}

public class Result
{
private String id_kitab;

private String bab;

private String 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;
}

public String getId_bab ()
{
    return id_bab;
}

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

@Override
public String toString()
{
    return "ClassPojo [id_kitab = "+id_kitab+", bab = "+bab+", id_bab = 
"+id_bab+"]";
}
}
}

检查这种方式数据是否为null并添加arraylist

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) {
       if (response.isSuccessful())
       if (response.body() != null)
        pbLoading.setVisibility(View.GONE);
        if (response.body().getValue().equalsIgnoreCase("1")) {
            results.addAll(response.body().getResult());
            babAdapter = new BabAdapter(MenuBab.this, results);
            rvBab.setAdapter(babAdapter);
        }
    }

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

    }
    });
    }

答案 2 :(得分:0)

像这样在你的Response类中传递数组..

public class Respon {
    private String value;
    private BabResult [] result;

    public String getValue() {
        return value;
    }

    public BabResult [] getResultBab() { return result; }
}

以及loadDataBab方法..

 private List<BabResult> results = new ArrayList<>();



    private void loadDataBab() {
Retrofit retrofit = new Retrofit
        .Builder()
        .baseUrl(URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();
RequestInterface api = retrofit.create(RequestInterface.class);
Call<Respon> call = api.tampil("1");
call.enqueue(new Callback<Respon>() {
    @Override
    public void onResponse(Call<Respon> call, Response<Respon> response) {
        String value = response.body().getValue();
        if (value.equals("1")) {

            results = new ArrayList<>(Arrays.asList(response.body().getResultBab()));

        }
    }

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

    }
});

}

答案 3 :(得分:0)

我将回复更改为:

public class Respon {

private String value;
private List<BabResult> result;

public String getValue() { return value; }

public List<BabResult> getResult() { return result; }

}

它有效。谢谢:))