Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 数据未显示在ListView中,但在打开messenger应用程序时,将显示交互数据_Android_Json_Listview - Fatal编程技术网

Android 数据未显示在ListView中,但在打开messenger应用程序时,将显示交互数据

Android 数据未显示在ListView中,但在打开messenger应用程序时,将显示交互数据,android,json,listview,Android,Json,Listview,你好。我想问一下为什么我的listView在从服务器获取JSON响应后不显示数据。我以为数据没有提取,但当我看到日志猫时,它成功地提取了,但没有显示在我的listView中 但当我在messenger中聊天时,我回到我的应用程序,数据显示出来。起初,我不知道数据突然出现的原因。所以我想可能是延期了。所以我再试一次,等了几分钟,但什么也没发生,没有显示数据。希望你能帮我解决这个问题 我等了几分钟,结果就是这样 Logcat 当我打开信使 原木猫 12-25 20:46:26.498 30768-

你好。我想问一下为什么我的listView在从服务器获取JSON响应后不显示数据。我以为数据没有提取,但当我看到日志猫时,它成功地提取了,但没有显示在我的listView中

但当我在messenger中聊天时,我回到我的应用程序,数据显示出来。起初,我不知道数据突然出现的原因。所以我想可能是延期了。所以我再试一次,等了几分钟,但什么也没发生,没有显示数据。希望你能帮我解决这个问题

我等了几分钟,结果就是这样

Logcat

当我打开信使

原木猫

12-25 20:46:26.498 30768-30768/com.sample.test D/ViewRootImpl@19e90b4[MainActivity]: MSG_WINDOW_FOCUS_CHANGED 0
12-25 20:46:26.612 30768-30768/com.sample.test D/InputTransport: Input channel destroyed: fd=80
点击聊天框后

原木猫

12-25 20:46:26.498 30768-30768/com.sample.test D/ViewRootImpl@19e90b4[MainActivity]: MSG_WINDOW_FOCUS_CHANGED 0
12-25 20:46:26.612 30768-30768/com.sample.test D/InputTransport: Input channel destroyed: fd=80
再次打开应用程序后

12-25 21:03:45.502 7264-7264/com.sample.test I/onResume: User is active. cancel timer
12-25 21:03:45.531 7264-7281/com.sample.test D/mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000,  [1080x1920]-format:1
12-25 21:03:45.550 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans type: android.support.v7.widget.AppCompatTextView{1156b90 V.ED..... ......ID 24,53-64,106 #7f0800a3 app:id/sl_desc}
12-25 21:03:45.550 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans amount: android.support.v7.widget.AppCompatTextView{e44dc89 V.ED..... ......ID 928,49-1008,98 #7f0800c5 app:id/trans_amount}
12-25 21:03:45.550 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans date: android.support.v7.widget.AppCompatTextView{979d48e V.ED..... ......ID 24,106-204,155 #7f0800c4 app:id/transDate}
12-25 21:03:45.551 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans type: android.support.v7.widget.AppCompatTextView{ac82ccb V.ED..... ......ID 24,53-64,106 #7f0800a3 app:id/sl_desc}
12-25 21:03:45.551 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans amount: android.support.v7.widget.AppCompatTextView{4e31ca8 V.ED..... ......ID 928,49-1008,98 #7f0800c5 app:id/trans_amount}
12-25 21:03:45.551 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans date: android.support.v7.widget.AppCompatTextView{95e93c1 V.ED..... ......ID 24,106-204,155 #7f0800c4 app:id/transDate}
12-25 21:03:45.551 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans type: android.support.v7.widget.AppCompatTextView{a2313f2 V.ED..... ......ID 24,53-64,106 #7f0800a3 app:id/sl_desc}
12-25 21:03:45.551 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans amount: android.support.v7.widget.AppCompatTextView{2f6a43 V.ED..... ......ID 928,49-1008,98 #7f0800c5 app:id/trans_amount}
12-25 21:03:45.551 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans date: android.support.v7.widget.AppCompatTextView{962d8c0 V.ED..... ......ID 24,106-204,155 #7f0800c4 app:id/transDate}
12-25 21:03:45.552 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans type: android.support.v7.widget.AppCompatTextView{7ee3cb5 V.ED..... ......ID 24,53-64,106 #7f0800a3 app:id/sl_desc}
12-25 21:03:45.552 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans amount: android.support.v7.widget.AppCompatTextView{fed2f4a V.ED..... ......ID 928,49-1008,98 #7f0800c5 app:id/trans_amount}
12-25 21:03:45.552 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans date: android.support.v7.widget.AppCompatTextView{9a1debb V.ED..... ......ID 24,106-204,155 #7f0800c4 app:id/transDate}
12-25 21:03:45.559 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans type: android.support.v7.widget.AppCompatTextView{c7c4184 V.ED..... ......ID 24,53-64,106 #7f0800a3 app:id/sl_desc}
12-25 21:03:45.560 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans amount: android.support.v7.widget.AppCompatTextView{cf64d6d V.ED..... ......ID 928,49-1008,98 #7f0800c5 app:id/trans_amount}
12-25 21:03:45.561 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans date: android.support.v7.widget.AppCompatTextView{fc45da2 V.ED..... ......ID 24,106-204,155 #7f0800c4 app:id/transDate}
12-25 21:03:45.576 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans type: android.support.v7.widget.AppCompatTextView{2ac768f V.ED..... ......ID 0,0-0,0 #7f0800a3 app:id/sl_desc}
12-25 21:03:45.576 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans amount: android.support.v7.widget.AppCompatTextView{1283d1c V.ED..... ......ID 0,0-0,0 #7f0800c5 app:id/trans_amount}
12-25 21:03:45.576 7264-7264/com.sample.test D/SLDTL Adapter GetView: Trans date: android.support.v7.widget.AppCompatTextView{68bd25 V.ED..... ......ID 0,0-0,0 #7f0800c4 app:id/transDate}
12-25 21:03:45.577 7264-7264/com.sample.test D/AbsListView:  onsize change 
12-25 21:03:45.600 7264-7264/com.sample.test D/ViewRootImpl@8eff987[MainActivity]: MSG_WINDOW_FOCUS_CHANGED 1
12-25 21:03:45.601 7264-7264/com.sample.test V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@71710c6 nm : com.sample.test ic=null
12-25 21:03:45.601 7264-7264/com.sample.test I/InputMethodManager: [IMM] startInputInner - mService.startInputOrWindowGainedFocus
12-25 21:03:45.611 7264-7264/com.sample.test D/InputTransport: Input channel constructed: fd=74
数据已成功显示在我的listView中

这是我为SLDTLFragment.java编写的代码

SLDTLAdapter.java

Add adapter.notifyDatasetChanged在将项添加到列表后,如中所示

for (int index=0; index < array.length(); index++) {
                                SLDTLData data= new SLDTLData();
                                JSONObject object = (JSONObject)array.get(index);

                                String tr_type= object.getString("tr_type");
                                // Log.d("SLDTLFragment", "SL Details -sle_code attribute       : " + tr_type);
                                String credit_debit= object.getString("credit");
                                // Log.d("SLDTLFragment", "SL Details -sle_code attribute       : " + credit_debit);
                                String tr_date= object.getString("tr_date");
                                // Log.d("SLDTLFragment", "SL Details -sle_code attribute       : " + tr_date);

                                // Log.d("SLDTLFragment", "SL Details -------------------------------------------------------------------------------------");

                                data.setSldtl_trans_type(tr_type);
                                data.setSldtl_credit_debit(credit_debit);
                                data.setSldtltrans_date(tr_date);

                                sldtlDataList.add(data);

                                data.getSldtl_trans_type();
                                data.getSldtl_credit_debit();
                                data.getSldtltrans_date();

//                                Log.d("SLDTLFragment", "Get SLDTL: "+ sl_data.getSldtl_trans_type());
//                                Log.d("SLDTLFragment", "Get SLDTL: "+ sl_data.getSldtl_credit_debit());
//                                Log.d("SLDTLFragment", "Get SLDTL: "+ sl_data.getSldtltrans_date());
                            }
adapter.notifyDataSetChanged(); //<----- this will refresh list immediately

这种问题发生在线程中,因为您在前台线程的listView中设置适配器,并且在后台线程的列表中添加数据,所以要解决这种问题,只需在获取数据后设置listView适配器,如下所示:

// other stuf before json calling
    StringRequest strReq= new StringRequest(Request.Method.POST,
                    AppConfig.URL_SL_DETAILS, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.d("SLDTLFragment onResponse", "SL Details Response: " + response.toString());
                    hideDialog();

                    try{
                        JSONObject jObj= new JSONObject(response.toString());
                        //                    boolean error= jObj.getBoolean("error");
                        if(!jObj.isNull("sl_details")){
                            JSONObject accountsObject = (JSONObject) jObj.get("sl_details");
                            // access individual json object thru jsonObject.get("FIELD_NAME")
                            Log.d("LoginActivity", "SL Details -error attribute             : " + accountsObject.get("error").toString());
                            JSONArray slArray = accountsObject.optJSONArray("sl_row");
                            // Check if its login data i.e. user present
                            if (slArray != null) {
                                JSONArray array = accountsObject.getJSONArray("sl_row");
                                // access individual json array thru jsonObject.getJSONArray("FIELD_NAME")
                                Log.d("SLDTLFragment", "SL Details -sl_row array           : " + accountsObject.getJSONArray("sl_row").toString());

                                for (int index=0; index < array.length(); index++) {
                                    SLDTLData data= new SLDTLData();
                                    JSONObject object = (JSONObject)array.get(index);

                                    String tr_type= object.getString("tr_type");
                                    // Log.d("SLDTLFragment", "SL Details -sle_code attribute       : " + tr_type);
                                    String credit_debit= object.getString("credit");
                                    // Log.d("SLDTLFragment", "SL Details -sle_code attribute       : " + credit_debit);
                                    String tr_date= object.getString("tr_date");
                                    // Log.d("SLDTLFragment", "SL Details -sle_code attribute       : " + tr_date);

                                    // Log.d("SLDTLFragment", "SL Details -------------------------------------------------------------------------------------");

                                    data.setSldtl_trans_type(tr_type);
                                    data.setSldtl_credit_debit(credit_debit);
                                    data.setSldtltrans_date(tr_date);

                                    sldtlDataList.add(data);

                                    data.getSldtl_trans_type();
                                    data.getSldtl_credit_debit();
                                    data.getSldtltrans_date();
                                    callListAdapter();

    //                                Log.d("SLDTLFragment", "Get SLDTL: "+ sl_data.getSldtl_trans_type());
    //                                Log.d("SLDTLFragment", "Get SLDTL: "+ sl_data.getSldtl_credit_debit());
    //                                Log.d("SLDTLFragment", "Get SLDTL: "+ sl_data.getSldtltrans_date());
                                }
                            }
                        }else{
                            // a new JSON string that doesn't have sl_summ as member variable so display it and write new handler code
                            Log.d("SLDTLFragment", "Unknown JSON String          : " + jObj.toString());
                        }
                    }catch(JSONException e){
                        e.printStackTrace();
                    }

                }//end onResponse
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e(TAG, "SLDTL response Error: " + error.getMessage());
                }
            }){
                @Override
                protected Map<String, String> getParams() {
                    // Posting params to register url
                    Map<String, String> params = new HashMap<String, String>();
                    params.put("br_code", br_code);
                    params.put("client_id", client_id);
                    params.put("slc_code", slc);
                    params.put("slt_code", slt);
                    params.put("ref_number", ref_no);

                    return params;
                }
            };

        public void callListAdapter(){
        adapter= new SLDTLAdapter(getActivity(), sldtlDataList);
            listView.setAdapter(adapter);
            }
// other stuf
试试看。如果有任何问题,请发表评论。谢谢

public class SLDTLAdapter extends BaseAdapter {

        private Activity activity;
        private LayoutInflater inflater;
        private List<SLDTLData> sl_data;


     public SLDTLAdapter(Activity activity, List<SLDTLData>sl_data){
         this.activity= activity;
         this.sl_data= sl_data;
     }

    @Override
    public View getView(int position, View ConvertView, ViewGroup parent) {

        Log.d("SLDTL Adapter GetView","");

//        if (inflater == null)     //
//            inflater = (LayoutInflater) activity
//                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//
//        if (ConvertView == null)
//            ConvertView = inflater.inflate(R.layout.fragment_sldtl_row, null);

        ConvertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_sldtl_row, null);

        TextView sl_type = (TextView) ConvertView.findViewById(R.id.sl_desc);
        TextView trans_date = (TextView) ConvertView.findViewById(R.id.transDate);
        TextView trans_amount = (TextView) ConvertView.findViewById(R.id.trans_amount);
        TextView debitCredit = (TextView) ConvertView.findViewById(R.id.debitCredit);

        SLDTLData sl= sl_data.get(position);

        sl_type.setText(sl.getSldtl_trans_type());
        trans_amount.setText(sl.getSldtl_credit_debit());
        trans_date.setText(sl.getSldtltrans_date());


        Log.d("SLDTL Adapter GetView","Trans type: "    +sl_type);
        Log.d("SLDTL Adapter GetView","Trans amount: "  +trans_amount);
        Log.d("SLDTL Adapter GetView","Trans date: "    +trans_date);

        return ConvertView;
    }

    @Override
    public int getCount() {
        return  sl_data.size();
    }

    @Override
    public Object getItem(int i) {
        return sl_data.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

}
for (int index=0; index < array.length(); index++) {
                                SLDTLData data= new SLDTLData();
                                JSONObject object = (JSONObject)array.get(index);

                                String tr_type= object.getString("tr_type");
                                // Log.d("SLDTLFragment", "SL Details -sle_code attribute       : " + tr_type);
                                String credit_debit= object.getString("credit");
                                // Log.d("SLDTLFragment", "SL Details -sle_code attribute       : " + credit_debit);
                                String tr_date= object.getString("tr_date");
                                // Log.d("SLDTLFragment", "SL Details -sle_code attribute       : " + tr_date);

                                // Log.d("SLDTLFragment", "SL Details -------------------------------------------------------------------------------------");

                                data.setSldtl_trans_type(tr_type);
                                data.setSldtl_credit_debit(credit_debit);
                                data.setSldtltrans_date(tr_date);

                                sldtlDataList.add(data);

                                data.getSldtl_trans_type();
                                data.getSldtl_credit_debit();
                                data.getSldtltrans_date();

//                                Log.d("SLDTLFragment", "Get SLDTL: "+ sl_data.getSldtl_trans_type());
//                                Log.d("SLDTLFragment", "Get SLDTL: "+ sl_data.getSldtl_credit_debit());
//                                Log.d("SLDTLFragment", "Get SLDTL: "+ sl_data.getSldtltrans_date());
                            }
adapter.notifyDataSetChanged(); //<----- this will refresh list immediately
// other stuf before json calling
    StringRequest strReq= new StringRequest(Request.Method.POST,
                    AppConfig.URL_SL_DETAILS, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.d("SLDTLFragment onResponse", "SL Details Response: " + response.toString());
                    hideDialog();

                    try{
                        JSONObject jObj= new JSONObject(response.toString());
                        //                    boolean error= jObj.getBoolean("error");
                        if(!jObj.isNull("sl_details")){
                            JSONObject accountsObject = (JSONObject) jObj.get("sl_details");
                            // access individual json object thru jsonObject.get("FIELD_NAME")
                            Log.d("LoginActivity", "SL Details -error attribute             : " + accountsObject.get("error").toString());
                            JSONArray slArray = accountsObject.optJSONArray("sl_row");
                            // Check if its login data i.e. user present
                            if (slArray != null) {
                                JSONArray array = accountsObject.getJSONArray("sl_row");
                                // access individual json array thru jsonObject.getJSONArray("FIELD_NAME")
                                Log.d("SLDTLFragment", "SL Details -sl_row array           : " + accountsObject.getJSONArray("sl_row").toString());

                                for (int index=0; index < array.length(); index++) {
                                    SLDTLData data= new SLDTLData();
                                    JSONObject object = (JSONObject)array.get(index);

                                    String tr_type= object.getString("tr_type");
                                    // Log.d("SLDTLFragment", "SL Details -sle_code attribute       : " + tr_type);
                                    String credit_debit= object.getString("credit");
                                    // Log.d("SLDTLFragment", "SL Details -sle_code attribute       : " + credit_debit);
                                    String tr_date= object.getString("tr_date");
                                    // Log.d("SLDTLFragment", "SL Details -sle_code attribute       : " + tr_date);

                                    // Log.d("SLDTLFragment", "SL Details -------------------------------------------------------------------------------------");

                                    data.setSldtl_trans_type(tr_type);
                                    data.setSldtl_credit_debit(credit_debit);
                                    data.setSldtltrans_date(tr_date);

                                    sldtlDataList.add(data);

                                    data.getSldtl_trans_type();
                                    data.getSldtl_credit_debit();
                                    data.getSldtltrans_date();
                                    callListAdapter();

    //                                Log.d("SLDTLFragment", "Get SLDTL: "+ sl_data.getSldtl_trans_type());
    //                                Log.d("SLDTLFragment", "Get SLDTL: "+ sl_data.getSldtl_credit_debit());
    //                                Log.d("SLDTLFragment", "Get SLDTL: "+ sl_data.getSldtltrans_date());
                                }
                            }
                        }else{
                            // a new JSON string that doesn't have sl_summ as member variable so display it and write new handler code
                            Log.d("SLDTLFragment", "Unknown JSON String          : " + jObj.toString());
                        }
                    }catch(JSONException e){
                        e.printStackTrace();
                    }

                }//end onResponse
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e(TAG, "SLDTL response Error: " + error.getMessage());
                }
            }){
                @Override
                protected Map<String, String> getParams() {
                    // Posting params to register url
                    Map<String, String> params = new HashMap<String, String>();
                    params.put("br_code", br_code);
                    params.put("client_id", client_id);
                    params.put("slc_code", slc);
                    params.put("slt_code", slt);
                    params.put("ref_number", ref_no);

                    return params;
                }
            };

        public void callListAdapter(){
        adapter= new SLDTLAdapter(getActivity(), sldtlDataList);
            listView.setAdapter(adapter);
            }
// other stuf