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