Java 单击列表时选择了错误的项?

Java 单击列表时选择了错误的项?,java,android,json,Java,Android,Json,单击列表时,我会将一些值从一个片段传递到另一个片段。当我选择“说第0项”时,我会收到正确行的Toast消息,但会将错误的值发送到另一个片段。有时还会发送空值。根据我的代码,我认为问题可能不是列表,而是json数据。这是我的列表视图代码 这是我发送请求的截击码 public void sendInvoiceNum(最终字符串invNumber)抛出JSONException{ final Context=getActivity(); StringRequest StringRequest=新的St

单击列表时,我会将一些值从一个片段传递到另一个片段。当我选择“说第0项”时,我会收到正确行的Toast消息,但会将错误的值发送到另一个片段。有时还会发送空值。根据我的代码,我认为问题可能不是列表,而是json数据。这是我的列表视图代码

这是我发送请求的截击码

public void sendInvoiceNum(最终字符串invNumber)抛出JSONException{
final Context=getActivity();
StringRequest StringRequest=新的StringRequest(Request.Method.POST、INVOICE\u URL、,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
//Toast.makeText(上下文、响应、Toast.LENGTH_LONG).show();
显示发票(回复);
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(上下文,error.toString(),Toast.LENGTH_SHORT.show();
}
}) {
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数put(关键发票、发票编号);
返回参数;
}
};
RequestQueue rq=Volley.newRequestQueue(上下文);
rq.add(请求);
}
公共void showInvoice(字符串json){
final Context=getActivity();
ParseInvoice pi=新的ParseInvoice(json);
pi.parseInvoice();
InvoiceDetailsList idl=新的InvoiceDetailsList((活动)上下文,ParseInvoice.barcode,ParseInvoice.description,ParseInvoice.weight,ParseInvoice.rate,ParseInvoice.makingAmt
,ParseInvoice.net_rate,ParseInvoice.itemTotal);
最终字符串[]条形码=ParseInvoice.barcode;
//Toast.makeText(上下文,String.valueOf(条形码[0]),Toast.LENGTH_LONG.show();
inv_listView.setAdapter(idl);
}

单击时,不要使用此语句检索视图项的位置:

int pos = all_listView.getPositionForView(view);

只需使用OnItemClick()生成的变量“int position”来检索单击的视图项的位置

单击时,不使用此语句检索视图项的位置:

int pos = all_listView.getPositionForView(view);


只需使用OnItemClick()生成的变量“int position”来检索单击的视图项的位置

你犯了什么错误吗?或者您可以显示片段中的值是从何处获得的?@tinysunlight我正在获取showJson中的值,并将它们传递给另一个片段,在该片段中,我将它们设置为文本视图“int pos=all_listView.getPositionForView(view);”似乎是多余的,因为您从回调中获取单击的视图和该视图的位置。在“args.putString”(“INVOICENO”,INVOICENO);“您确定,你想通过这个课程吗?@DanielBo我知道我只是想检查一下,所以我用了它。但是我想主要的问题是json数据。因为我得到了正确的职位。你能吗help@tinysunlight我已经更新了用于接收另一个片段中的值的代码。请看一看,谢谢:)您是否遇到了一些错误?或者您可以显示片段中的值是从何处获得的?@tinysunlight我正在获取showJson中的值,并将它们传递给另一个片段,在该片段中,我将它们设置为文本视图“int pos=all_listView.getPositionForView(view);”似乎是多余的,因为您从回调中获取单击的视图和该视图的位置。在“args.putString”(“INVOICENO”,INVOICENO);“您确定,你想通过这个课程吗?@DanielBo我知道我只是想检查一下,所以我用了它。但是我想主要的问题是json数据。因为我得到了正确的职位。你能吗help@tinysunlight我已经更新了在另一个片段中接收值的代码。请看一看,谢谢:)我已经尝试过,但它不起作用。问题是我想是json数据。请检查更新的问题,在“parseJson”方法中的try-and-catch语句之前尝试调试它,并查看调试器是否在每次单击视图项时都执行try语句。我刚刚调试了它,它执行了try-catch。但是我选择了第一个值,第二个值被选择到“[pos-1]”,因为在“OnItemClick”方法中有一个位置。我想这会解决它的。它不起作用,它给了我一个异常java.lang.ArrayIndexOutOfBoundsException:length=8;index=-1I已经尝试过它不起作用。我认为问题出在json数据上。请检查更新的问题尝试在“parseJson”方法中的try和catch语句之前调试它,并查看调试器是否在每次单击视图项时都执行try语句。我刚刚调试了它,它执行了try-catch。但是我选择了第一个值,第二个值被选择到“[pos-1]”,因为在“OnItemClick”方法中有一个位置。我想这会解决它的。它不起作用,它给了我一个异常java.lang.ArrayIndexOutOfBoundsException:length=8;索引=-1
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        setHasOptionsMenu(true);
        View viewInvest = inflater.inflate(R.layout.view_invest, container, false);

        String invNo = getArguments().getString("INVOICENO");
        String invDate = getArguments().getString("INVOICEDATE");
        String custInfo = getArguments().getString("CUSTINFO");
        String inVat = getArguments().getString("ITEMVAT");
        String inSum = getArguments().getString("ITEMSUM");
        String type = getArguments().getString("BILLTYPE");

  try {
            if (invNo == null)
            {
                Toast.makeText(getContext(), "This is a wrong value being sent "+invNo, Toast.LENGTH_LONG).show();
            }else {
                sendInvoiceNum(invNo);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }


        tv_invoiceNo = (TextView) viewInvest.findViewById(R.id.tv_invoiceNo);
        tv_invoicedate = (TextView) viewInvest.findViewById(R.id.tv_invDate);
        tv_custInfo = (TextView) viewInvest.findViewById(R.id.tv_invName);
        tv_vat = (TextView) viewInvest.findViewById(R.id.tv_invVat);
        tv_sum = (TextView) viewInvest.findViewById(R.id.tv_invoiceSum);
        inv_listView = (ListView) viewInvest.findViewById(R.id.invest_listView);

        tv_invoiceNo.setText(invNo);
        tv_invoicedate.setText(invDate);
        tv_custInfo.setText(custInfo);
        tv_vat.setText(inVat);
        tv_sum.setText(inSum);

        return viewInvest;
    }
  public void sendInvoiceNum(final String invNumber) throws JSONException {
        final Context context = getActivity();
        StringRequest stringRequest = new StringRequest(Request.Method.POST, INVOICE_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        //Toast.makeText(context, response, Toast.LENGTH_LONG).show();
                        showInvoice(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(context, error.toString(), Toast.LENGTH_SHORT).show();
                    }
                }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put(KEY_INVOICE, invNumber);
                return params;
            }
        };
        RequestQueue rq = Volley.newRequestQueue(context);
        rq.add(stringRequest);
    }

    public void showInvoice(String json) {
        final Context context = getActivity();
        ParseInvoice pi = new ParseInvoice(json);
        pi.parseInvoice();

        InvoiceDetailsList idl = new InvoiceDetailsList((Activity) context, ParseInvoice.barcode, ParseInvoice.description, ParseInvoice.weight, ParseInvoice.rate, ParseInvoice.makingAmt
                , ParseInvoice.net_rate, ParseInvoice.itemTotal);
        final String[] barcodes = ParseInvoice.barcode;

        // Toast.makeText(context, String.valueOf(barcodes[0]), Toast.LENGTH_LONG).show();
        inv_listView.setAdapter(idl);
    }
int pos = all_listView.getPositionForView(view);