从json解析数据时如何进行干杯是null还是没有结果?

时间:2017-09-28 02:54:32

标签: android arrays json

基于解析json,当我的表数据库为空时,我有一个小问题。我的意思是,当数据没有结果或没有找到数据时,请举手祝贺“抱歉没有找到数据”。任何帮助将不胜感激。

这里是我的代码,用于显示数据

private void showEmployee(){
    JSONObject jsonObject = null;
    ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String, String>>();
    try {
        jsonObject = new JSONObject(JSON_STRING);
        JSONArray result = jsonObject.getJSONArray(konfigurasi.TAG_JSON_ARRAY);

        for(int i = 0; i<result.length(); i++){
            JSONObject jo = result.getJSONObject(i);
            String id = jo.getString(konfigurasi.TAG_ID);
            String nama = jo.getString(konfigurasi.TAG_NAMA);
            String pyg = jo.getString(konfigurasi.TAG_PENYELENGGARA);
            String tmpt = jo.getString(konfigurasi.TAG_TEMPAT);
            String tgl = jo.getString(konfigurasi.TAG_TGL);
            String jam = jo.getString(konfigurasi.TAG_JAM);
            String email = jo.getString(konfigurasi.TAG_EMAIL);

            HashMap<String,String> employees = new HashMap<>();
            employees.put(konfigurasi.TAG_ID,id);
            employees.put(konfigurasi.TAG_NAMA,nama);
            employees.put(konfigurasi.TAG_PENYELENGGARA,pyg);
            employees.put(konfigurasi.TAG_TEMPAT,tmpt);
            employees.put(konfigurasi.TAG_TGL,tgl);
            employees.put(konfigurasi.TAG_JAM,jam);
            employees.put(konfigurasi.TAG_EMAIL,email);
            list.add(employees);
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

    ListAdapter adapter = new MySimpleArrayAdapter(this, list);

    listView.setAdapter(adapter);
}

这对于postexcetude代码:

private void getJSON(){
class GetJSON extends AsyncTask<Void,Void,String>{

    ProgressDialog loading;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        loading = ProgressDialog.show(TampilSemuaPgw.this,"Mengambil Data","Mohon Tunggu...",false,false);
    }

    @Override
    protected void onPostExecute(String s) {

        super.onPostExecute(s);
        if(s == null || s.length() == 0){
            Toast.makeText(getApplicationContext(), "No Data",Toast.LENGTH_LONG).show();
        }

        // Dismiss the progress dialog
        if (loading.isShowing())
            loading.dismiss();
        JSON_STRING = s;
        showEmployee();
    }

    @Override
    protected String doInBackground(Void... params) {
        RequestHandler rh = new RequestHandler();
        String s = rh.sendGetRequest(konfigurasi.URL_GET_ALL);

        return s;
    }
}
GetJSON gj = new GetJSON();
gj.execute();

}

KeLiuyue

更新代码

    @Override
protected String doInBackground(Void... params) {
    RequestHandler rh = new RequestHandler();
    String s = rh.sendGetRequest(konfigurasi.URL_GET_ALL);
    return s;
}

@Override
protected void onPostExecute(String s) {

    try {
        JSONObject jsonObject = new JSONObject(s);
        JSONArray jsonArray = jsonObject.getJSONArray("result");
        if(jsonArray.length() == 0){
            Toast.makeText(getApplicationContext(), "No Data", Toast.LENGTH_LONG).show();
            if (loading.isShowing()){
               loading.dismiss();
            }
            return;
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
    Log.e("TAG",s);
    // Dismiss the progress dialog
    if (loading.isShowing())
        loading.dismiss();
    JSON_STRING = s;
    showEmployee();
}

2 个答案:

答案 0 :(得分:1)

在您的代码中尝试此操作。

 @Override
protected String doInBackground(Void... params) {
    RequestHandler rh = new RequestHandler();
    String s = rh.sendGetRequest(konfigurasi.URL_GET_ALL);
    return s;
}

@Override
protected void onPostExecute(String s) {

    // edited here
    try {
        JSONObject jsonObject = new JSONObject(s);
        JSONArray jsonArray = jsonObject.getJSONArray("result");
        if(jsonArray.length() == 0){
            Toast.makeText(getApplicationContext(), "No Data", Toast.LENGTH_LONG).show();
            if (loading.isShowing()){
               loading.dismiss();
            }
            return;
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
    Log.e("TAG",s);
    // Dismiss the progress dialog
    if (loading.isShowing())
        loading.dismiss();
    JSON_STRING = s;
    showEmployee();
}

1.在doInBackground方法

中确定返回值是否为空

2.在onPostExecute方法

中确定参数值是否为空

答案 1 :(得分:0)

您需要调试此问题,为什么您的吐司没有显示:

您已在onPostExecute中正确显示show Toast代码

现在要调试,首先把一个Log知道s的值,无论它是null还是空。

如果是,仍然没有显示toast,请在Toast之前移动对话框关闭对话框并检查。

如果Toast仍然没有显示调试你的showEmployee()方法。