java中显示无效的索引,如何解决java.lang.IndexOutOfBoundsException:无效的索引0,大小为0?...

I have two autocompletetextviews,in first autocompletetextview i am getting items from server using json,the following is response for that

{"status":"success","clientlist":[{"cid":"1","name":"margi"},{"cid":"2","name":"steven"}],"productboxtype":[{"pbxid":"1","pbxname":"1 Dozen","qtyperbox":"12"},{"pbxid":"2","pbxname":"2 Dozens","qtyperbox":"24"},{"pbxid":"3","pbxname":"3 Dozens","qtyperbox":"36"}]}

i am able to get names in my first autocomplete and it works fine,

Now issue is suppose user select item "margi" and its cid is 1,so again i am sending request to server and trying to get productnames of 'margi',and its response is

{"status":"success","clientproduct":[{"pid":"4","name":"kangan pair","unitprice":"1500","boxqty":"1","bulkprice":[{"minqty":"10","price":"1500"},{"minqty":"15","price":"1470"},{"minqty":"20","price":"1460"}]}]}

MAniActivity

public class MainActivity extends Activity {

private AutoCompleteTextView acTextView;

private String catidtemp;

private String catid;

JSONParser jsonParser = new JSONParser();

private AutoCompleteTextView autoproduct;

private static final String FEEDBACK_URL = "";

private static final String FEEDBACK_SUCCESS = "status";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);

acTextView = (AutoCompleteTextView) findViewById(R.id.autocmplte_clorder_clname);

acTextView.setAdapter(new SuggestionAdapterClientList(this,acTextView.getText().toString()));

autoproduct=(AutoCompleteTextView)findViewById(R.id.autocmplte_clorder_product);

autoproduct.setAdapter(new SuggestionAdapterClientProduct(this, autoproduct.getText().toString()));

acTextView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view,

int position, long id) {

// TODO Auto-generated method stub

JsonParseClientProduct jp=new JsonParseClientProduct();

List list1 = new ArrayList();

list1 =jp.getParseJsonWCF(autoproduct.getText().toString());

if(position < list1.size())

new AttemptLogin(Integer.parseInt(list1.get(position).getId())).execute();

}

});

}

class AttemptLogin extends AsyncTask {

boolean failure = false;

private ProgressDialog pDialog;

private int selected_cid=1;

AttemptLogin(int selected_cid){

this.selected_cid=selected_cid;

}

@Override

protected void onPreExecute() {

super.onPreExecute();

pDialog = new ProgressDialog(MainActivity.this);

pDialog.setMessage("Sending..");

pDialog.setIndeterminate(true);

// pDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.custom_progress));

pDialog.setCancelable(true);

pDialog.show();

}

@SuppressWarnings("unused")

@Override

protected String doInBackground(String...args) {

//Check for success tag

//int success;

Looper.prepare();

try {

JsonParseClientList jp=new JsonParseClientList();

List params = new ArrayList();

List list =jp.getParseJsonWCF(acTextView.getText().toString());

for(int i = 0;i

{

if(list.get(i).getName().equals(acTextView.getText().toString()))

// params.add(new BasicNameValuePair("cid",list.get(i).getId()));

params.add(new BasicNameValuePair("cid",String.valueOf(selected_cid)));

// catid=list.get(i).getId();

// catidtemp=list.get(i).getId();

}

catidtemp=String.valueOf(selected_cid);

// catidtemp=list.get(i).getId();

System.out.println("cattttttiiiiddd????"+catidtemp);

params.add(new BasicNameValuePair("action", "clientproduct"));

System.out.println("su gayu server ma????"+params);

Log.d("request!", "starting");

// getting product details by making HTTP request

JSONObject json = jsonParser.makeHttpRequest (

FEEDBACK_URL, "POST", params);

//check your log for json response

Log.d("Login attempt", json.toString());

JSONObject jobj = new JSONObject(json.toString());

final String msg = jobj.getString("msg");

return json.getString(FEEDBACK_SUCCESS);

}catch (JSONException e) {

e.printStackTrace();

}

return null;

}

// After completing background task Dismiss the progress dialog

protected void onPostExecute(String file_url) {

//dismiss the dialog once product deleted

pDialog.dismiss();

//parentcat.getText().clear();

}}

public class SuggestGetSetClientProduct {

String id,name;

public SuggestGetSetClientProduct(String id, String name){

this.setId(id);

this.setName(name);

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

public class JsonParseClientProduct {

double current_latitude,current_longitude;

public JsonParseClientProduct(){}

public JsonParseClientProduct(double current_latitude,double current_longitude){

this.current_latitude=current_latitude;

this.current_longitude=current_longitude;

}

public List getParseJsonWCF(String sName)

{

List ListData = new ArrayList();

try {

String temp=sName.replace(" ", "%20");

System.out.println("what the...."+js);

URLConnection jc = js.openConnection();

BufferedReader reader = new BufferedReader(new InputStreamReader(jc.getInputStream()));

String line = reader.readLine();

JSONObject jsonResponse = new JSONObject(line);

Log.d("test", "Response : " +jsonResponse);

JSONArray jsonArray = jsonResponse.getJSONArray("clientproduct");

for(int i = 0; i < jsonArray.length(); i++){

JSONObject r = jsonArray.getJSONObject(i);

ListData.add(new SuggestGetSetClientProduct(r.getString("pid"),r.getString("name")));

}

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

return ListData;

}

}

public class SuggestionAdapterClientProduct extends ArrayAdapter{

protected static final String TAG = "SuggestionAdapter";

List suggestions = new ArrayList();

// private List suggestions;

public SuggestionAdapterClientProduct(Activity context, String nameFilter) {

super(context, android.R.layout.simple_dropdown_item_1line);

suggestions = new ArrayList();

}

@Override

public int getCount() {

return suggestions.size();

}

@Override

public String getItem(int index) {

return suggestions.get(index);

}

@Override

public Filter getFilter() {

Filter myFilter = new Filter() {

@Override

protected FilterResults performFiltering(CharSequence constraint) {

FilterResults filterResults = new FilterResults();

JsonParseClientProduct jp=new JsonParseClientProduct();

if (constraint != null) {

// A class that queries a web API, parses the data and

// returns an ArrayList

List new_suggestions = new ArrayList();

new_suggestions =jp.getParseJsonWCF(constraint.toString());

Log.d("test", "Size of array : " +new_suggestions.size());

//List new_suggestions =jp.getParseJsonWCF(constraint.toString());

suggestions.clear();

/*for (int i=0;i

suggestions.add(new_suggestions.get(i).getName());

}*/

for (int i=0;i

String name=new_suggestions.get(i).getName();

String id=new_suggestions.get(i).getId();

System.out.println("checis id"+id);

if(name.contains(constraint)){

suggestions.add(new_suggestions.get(i).getName());

}

}

// Now assign the values and count to the FilterResults

// object

filterResults.values = suggestions;

filterResults.count = suggestions.size();

}

return filterResults;

}

@Override

protected void publishResults(CharSequence contraint,

FilterResults results) {

if (results != null && results.count > 0) {

notifyDataSetChanged();

} else {

notifyDataSetInvalidated();

}

}

};

return myFilter;

}

}

}

L88P8.png

iZvsb.png

5tuXd.png

解决方案

java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 at

java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)

I believe the problem is here,

List new_suggestions =jp.getParseJsonWCF(constraint.toString());

Did you initialize your ArrayList ?

List new_suggestions = new ArrayList;

Check the size of the ArrayList first before it goes to For loop.

EDIT :

Your code should be like,

if (constraint != null) {

List new_suggestions = new ArrayList();

new_suggestions =jp.getParseJsonWCF(constraint.toString());

Log.d("test", "Size of array : " +new_suggestions.size());

// rest code here..//

Also, you didn't initialize your list in SuggestionAdapterClientProduct class,

private List suggestions;

Initialize your arrayList by,

List suggestions = new ArrayList();

in that class.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值