分析数据JSON时出错,Android Studio片段

分析数据JSON时出错,Android Studio片段,json,android-studio,android-fragments,Json,Android Studio,Android Fragments,有人请帮助我,为什么我的结果总是在分析数据时出错? 我的应用程序运行平稳,但不显示任何内容。我觉得自己被困在这里了。 这是我的密码 对不起,英语不好 API JSON public function getkategori2(){ $data = array(); $token = $this->input->post('f_token'); $tabel = $this->input->post('f_tabel'); if ($tok

有人请帮助我,为什么我的结果总是在分析数据时出错? 我的应用程序运行平稳,但不显示任何内容。我觉得自己被困在这里了。 这是我的密码 对不起,英语不好

API JSON

public function getkategori2(){
    $data = array();
    $token = $this->input->post('f_token');
    $tabel = $this->input->post('f_tabel');

    if ($token == '' || $tabel == ''){
        $data['result'] = false;
        $data['msg'] = "Data Kosong";

        echo json_encode($data);
        return;
    }

    $sql = 'SELECT * FROM '.$tabel.'_kategori INNER JOIN files WHERE '.$tabel.'_kategori.id_kategori = files.id_kategori';
    $q = $this->db->query($sql);

    if ($q->num_rows()>0) {

        foreach ($q->result() as $value) {
            $kategori = array(
                'nama_kategori' => $value->nama_kategori,
                'file_name' => $value->file_name,
            );
        };  
        $data['result'] = true;
        $data['kategori_data'] = $kategori;
        $data['msg'] = '';

    } else {
        $data['result'] = false;
        $data['msg'] = 'error';
    }

    echo json_encode($data);
}
JSON结果

public class KategoriFragment extends Fragment {

SessionManager sesi;
private ArrayList<Kategori> data;
private OkHttpClient okClient;
private RecyclerView rvData;

public KategoriFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_kategori, container, false);

    sesi = new SessionManager(getActivity());
    data = new ArrayList<>();
    okClient = new OkHttpClient();
    rvData = rootView.findViewById(R.id.rvData);
    RecyclerView.LayoutManager manager = new LinearLayoutManager(getActivity());
    rvData.setLayoutManager(manager);

    getData();

    return rootView;
}

private void getData(){
    data.clear();
    String url = Constant.BASE_URL + "getkategori2";

    FormBody parameters = new FormBody.Builder()
            .add("f_token", sesi.getToken())
            .add("f_tabel", sesi.getTabel())
            .build();

    //buat request untuk ambil data
    Request request = new Request.Builder()
            .url(url)
            .post(parameters)
            .build();

    okClient.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, final IOException e) {
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {


                    e.printStackTrace();
                    RbHelpers.pesan(getActivity(),
                            "error :" + e.getMessage());
                }
            });
        }

        @Override
        public void onResponse(Call call,final Response response) throws IOException {
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //hilangkan dialognya

                }});
            final String responData = response.body().string();
            RbHelpers.pre("respon data : " + responData);
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //debug hasilnya kedalam android monitor
                    try {
                        //parsing json
                        try {
                            JSONObject json = new JSONObject(responData);
                            Log.d("tagJSON",json.toString());
                            //check hasilnya apakah true or false
                            boolean hasil = json.getBoolean("result");

                            if (hasil){
                                //ada datanya
                                //buat object jsonArray
                                JSONArray jArray = json.getJSONArray("kategori_data");
                                //looping data dan masukkan kedalam arraylist
                                for (int i = 0; i < jArray.length(); i++){
                                    JSONObject jObj = jArray.getJSONObject(i);

                                    Kategori kategori = new Kategori();

                                    kategori.setKategoriNama(jObj.getString("nama_kategori"));
                                    kategori.setImg(jObj.getString("file_name"));

                                    //tinggal masukan ke arraylist
                                    data.add(kategori);
                                }
                            } else {
                                String msg = json.getString("msg");
                                RbHelpers.pesan(getActivity(), msg);
                            }
                            //tinggal masukin ke recylerview
                            //UserAdapter adapter = new UserAdapter
                            KategoriAdapter adapter = new KategoriAdapter(getActivity(), data);
                            rvData.setAdapter(adapter);

                        } catch (JSONException e){
                            RbHelpers.pesan(getActivity(), "Error parsing data");
                            e.printStackTrace();
                        }
                    } catch (Exception e) {
                        RbHelpers.pesan(getActivity(), "Error ambil data");
                        e.printStackTrace();
                    }
                }
            });
        }
    });
}
{ “结果”:正确, “kategori_数据”: { “nama_kategori”:“意大利面”, “文件名”:“1_面食.jpg” }, “msg”:” }

KategoriAdapter

public class KategoriAdapter extends RecyclerView.Adapter<KategoriAdapter.ViewHolder> {

private ArrayList<Kategori> mData;
private Context context;
private SessionManager sesi;

public KategoriAdapter (Context context, ArrayList<Kategori> mData){
    this.context = context;
    this.mData = mData;
}

@Override
public KategoriAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
    View view = LayoutInflater.from(context)
            .inflate(R.layout.item_list_kategori, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(KategoriAdapter.ViewHolder holder, int position) {

    Kategori k = mData.get(position);

    String kategori = k.getKategoriNama();
    String gambar = k.getImg();




    //masukan kedalam object viewholder
    holder.tvKategori.setText(kategori);



    Picasso.with(context)
            .load(Constant.BASE_IMAGE + sesi.getTabel() + "/kategori/" + gambar)
            .into(holder.ivKategori);

}

//buta object interface onAdapterjabatanListener
private OnAdapterListener listener;

//buat method untuk mendefiniskan listenernya
public void setListener(OnAdapterListener listener){
    this.listener = listener;
}

@Override
public int getItemCount() {
    return mData == null ? 0 : mData.size();
}



//buat class yang extend dari ViewHolder
class ViewHolder extends RecyclerView.ViewHolder{
    public LinearLayout container;
    public TextView tvKategori;
    public ImageView ivKategori;

    public ViewHolder(View v){
        super(v);

        //baru hubungkan variablenya dengan item yang ada di class layout item
        container = v.findViewById(R.id.container);
        tvKategori = v.findViewById(R.id.tvKategori);
        ivKategori = v.findViewById(R.id.ivKategori);
    }
}
公共类KategoriAdapter扩展了RecyclerView.Adapter{
私有ArrayList mData;
私人语境;
私人会话管理器sesi;
公共KategoriAdapter(上下文,ArrayList mData){
this.context=上下文;
this.mData=mData;
}
@凌驾
public KategoriAdapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图=LayoutFlater.from(上下文)
.充气(R.layout.item_list_kategori,父项,假);
返回新的ViewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(KategoriAdapter.ViewHolder,int位置){
Kategori k=mData.get(位置);
字符串kategori=k.getKategoriNama();
字符串gambar=k.getImg();
//masukan kedalam对象视图持有者
holder.tvKategori.setText(kategori);
毕加索。与(上下文)
.load(Constant.BASE_IMAGE+sesi.getTabel()+“/kategori/”+gambar)
.into(holder.ivKategori);
}
//但是AdapterJabatanListener上的对象接口
私有的onadapter侦听器;
//使用buat方法改善李斯特菌群
公共void setListener(OnAdapterListener侦听器){
this.listener=listener;
}
@凌驾
public int getItemCount(){
返回mData==null?0:mData.size();
}
//buat类yang延伸至dari视窗支架
类ViewHolder扩展了RecyclerView.ViewHolder{
公共线路布局集装箱;
公共文本视图tvKategori;
公共图像视图ivKategori;
公共视图持有者(视图v){
超级(五);
//在设计类项目中,最重要的是可变项目
容器=v.findviewbyd(R.id.container);
tvKategori=v.findViewById(R.id.tvKategori);
ivKategori=v.findViewById(R.id.ivKategori);
}
}
KategoriFragment

public class KategoriFragment extends Fragment {

SessionManager sesi;
private ArrayList<Kategori> data;
private OkHttpClient okClient;
private RecyclerView rvData;

public KategoriFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_kategori, container, false);

    sesi = new SessionManager(getActivity());
    data = new ArrayList<>();
    okClient = new OkHttpClient();
    rvData = rootView.findViewById(R.id.rvData);
    RecyclerView.LayoutManager manager = new LinearLayoutManager(getActivity());
    rvData.setLayoutManager(manager);

    getData();

    return rootView;
}

private void getData(){
    data.clear();
    String url = Constant.BASE_URL + "getkategori2";

    FormBody parameters = new FormBody.Builder()
            .add("f_token", sesi.getToken())
            .add("f_tabel", sesi.getTabel())
            .build();

    //buat request untuk ambil data
    Request request = new Request.Builder()
            .url(url)
            .post(parameters)
            .build();

    okClient.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, final IOException e) {
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {


                    e.printStackTrace();
                    RbHelpers.pesan(getActivity(),
                            "error :" + e.getMessage());
                }
            });
        }

        @Override
        public void onResponse(Call call,final Response response) throws IOException {
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //hilangkan dialognya

                }});
            final String responData = response.body().string();
            RbHelpers.pre("respon data : " + responData);
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //debug hasilnya kedalam android monitor
                    try {
                        //parsing json
                        try {
                            JSONObject json = new JSONObject(responData);
                            Log.d("tagJSON",json.toString());
                            //check hasilnya apakah true or false
                            boolean hasil = json.getBoolean("result");

                            if (hasil){
                                //ada datanya
                                //buat object jsonArray
                                JSONArray jArray = json.getJSONArray("kategori_data");
                                //looping data dan masukkan kedalam arraylist
                                for (int i = 0; i < jArray.length(); i++){
                                    JSONObject jObj = jArray.getJSONObject(i);

                                    Kategori kategori = new Kategori();

                                    kategori.setKategoriNama(jObj.getString("nama_kategori"));
                                    kategori.setImg(jObj.getString("file_name"));

                                    //tinggal masukan ke arraylist
                                    data.add(kategori);
                                }
                            } else {
                                String msg = json.getString("msg");
                                RbHelpers.pesan(getActivity(), msg);
                            }
                            //tinggal masukin ke recylerview
                            //UserAdapter adapter = new UserAdapter
                            KategoriAdapter adapter = new KategoriAdapter(getActivity(), data);
                            rvData.setAdapter(adapter);

                        } catch (JSONException e){
                            RbHelpers.pesan(getActivity(), "Error parsing data");
                            e.printStackTrace();
                        }
                    } catch (Exception e) {
                        RbHelpers.pesan(getActivity(), "Error ambil data");
                        e.printStackTrace();
                    }
                }
            });
        }
    });
}
公共类KategoriFragment扩展了片段{
会话管理器sesi;
私有数组列表数据;
私人OkHttpClient okClient;
私人数据回收;
公共部门{
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图根视图=充气机。充气(R.layout.fragment_kategori,容器,false);
sesi=新会话管理器(getActivity());
数据=新的ArrayList();
okClient=新的OkHttpClient();
rvData=rootView.findviewbyd(R.id.rvData);
RecyclerView.LayoutManager=newlinearlayoutmanager(getActivity());
rvData.setLayoutManager(管理器);
getData();
返回rootView;
}
私有void getData(){
data.clear();
字符串url=Constant.BASE_url+“getkategori2”;
FormBody参数=新建FormBody.Builder()
.add(“f_标记”,sesi.getToken())
.add(“f_tabel”,sesi.getTabel())
.build();
//buat请求取消环境数据
Request Request=newrequest.Builder()
.url(url)
.post(参数)
.build();
okClient.newCall(request).enqueue(newcallback(){
@凌驾
公共void onFailure(调用,最终IOE异常){
getActivity().runOnUiThread(新的Runnable()){
@凌驾
公开募捐{
e、 printStackTrace();
RbHelpers.pesan(getActivity(),
“错误:”+e.getMessage());
}
});
}
@凌驾
public void onResponse(调用、最终响应)引发IOException{
getActivity().runOnUiThread(新的Runnable()){
@凌驾
公开募捐{
//hilangkan dialognya
}});
final String responData=response.body().String();
RbHelpers.pre(“响应数据:+responData”);
getActivity().runOnUiThread(新的Runnable()){
@凌驾
公开募捐{
//调试hasilnya kedalam android监视器
试一试{
//解析json
试一试{
JSONObject json=新的JSONObject(响应数据);
Log.d(“tagJSON”,json.toString());
//检查hasilnya apakah是否正确
boolean hasil=json.getBoolean(“结果”);
如果(哈西尔){
//阿达达塔尼亚
//buat对象jsonArray
JSONArray jArray=json.getJSONArray(“kategori_数据”);
//循环数据和masukkan kedalam阵列列表
for(int i=0;i