搜索获得的数组出指数势必异常 [英] on search getting array out of index bound exception
本文介绍了搜索获得的数组出指数势必异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在其中我从JSON数据显示列表视图成一个应用程序,现在想申请上每当我在编辑框中键入东西listview.but搜索功能得到一个错误数组索引出bound.please帮我梳理一下。
HomeActivity
公共类HomeActivity扩展片段{
字符串国code;
ArrayList的< ProfileBean> catagery;
搜索的EditText;
AdaptorClass适配器;
公共静态字符串Bussinessurl; 公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){
// TODO自动生成方法存根
super.onCreate(savedInstanceState);
//setContentView(R.layout.homeactivity); 查看rootView = inflater.inflate(R.layout.homeactivity,集装箱,FALSE);
//Log.i(\"homeurl,http://chabu.agicent.com/api/v1/get_business?token=+ Login.USERTOKEN.toString());
搜索=(EditText上)rootView.findViewById(R.id.search); catagery =新的ArrayList< ProfileBean>();
新JSONAsyncTask()
.execute(Login.AllChabu); ListView控件列表视图=(ListView控件)rootView。 findViewById(R.id.list);
适配器=新AdaptorClass(getActivity(),R.layout.row,
catagery);
listview.setItemsCanFocus(假);
//listview.setOnItemClickListener(this);
listview.setTextFilterEnabled(真);
listview.setAdapter(适配器);
国家code = GetCountryZip code();
Log.i(国code,国家code);
listview.setOnItemClickListener(新OnItemClickListener(){ @覆盖
公共无效onItemClick(适配器视图<>为arg0,ARG1查看,
INT位置,长的id){
// TODO自动生成方法存根
//Toast.makeText(getActivity(),
// catagery.get(位置).getcategory_name(),Toast.LENGTH_LONG)
//。显示();
位置=位置+ 1;
Log.i(URL,Bussinessurl); 意图I =新意图(getActivity(),BusinessActivity.class);
startActivity(ⅰ);
}
}); search.setOnClickListener(新OnClickListener(){ @覆盖
公共无效的onClick(视图v){
// TODO自动生成方法存根
search.addTextChangedListener(新TextWatcher(){
@覆盖
公共无效afterTextChanged(编辑为arg0){ } @覆盖
公共无效beforeTextChanged(CharSequence中,诠释开始,
诠释计数后INT){ } @覆盖
公共无效onTextChanged(CharSequence中,诠释开始,
INT之前,诠释计数){
。adapter.getFilter()过滤(s.toString()); }
});
}
}); 返回rootView;
}
AdaptorClass
公共类AdaptorClass扩展ArrayAdapter< ProfileBean>实现可筛选{
私人列表< ProfileBean> originalData = NULL;
私人列表< ProfileBean> filteredData = NULL;
LayoutInflater六;
INT资源;
ViewHolder持有人;
私人ItemFilter MFILTER =新ItemFilter(); 公共AdaptorClass(上下文的背景下,INT资源,
ArrayList的< ProfileBean>对象){
超级(上下文,资源,对象);
VI =(LayoutInflater)上下文
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
资源=资源;
// actorList =物体;
this.filteredData =物体;
this.originalData =物体;
} @覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){ 视图V = convertView;
如果(V == NULL){
持有人=新ViewHolder();
V = vi.inflate(资源,NULL); holder.tvDescription =(TextView的)V
.findViewById(R.id.tvDescriptionn); v.setTag(保持器);
}其他{
支架=(ViewHolder)v.getTag();
} holder.tvDescription
.setText(filteredData.get(位置).getcategory_name()); 返回伏; } 静态类ViewHolder { 公众的TextView tvDescription;
} 公共android.widget.Filter用getFilter(){
返回MFILTER;
} 私有类ItemFilter扩展android.widget.Filter { @覆盖
保护FilterResults performFiltering(CharSequence的约束){ 字符串filterString = constraint.toString()与toLowerCase()。 FilterResults结果=新FilterResults(); 最终名单< ProfileBean>名单= originalData; 诠释计数=则为list.size();
Log.i(计数,将String.valueOf(计数));
最终的ArrayList< ProfileBean> NLIST =新的ArrayList< ProfileBean>(计数); 串filterableString; 的for(int i = 0; I<计数;我++){ ProfileBean豆= list.get(ⅰ);
filterableString = bean.getcategory_name();
如果(filterableString.toLowerCase()。包括(
filterString.toString()。与toLowerCase())){
nlist.add(豆);
}
} results.values = NLIST;
results.count = nlist.size(); 返回结果;
}
@燮pressWarnings(未登记)
@覆盖
保护无效publishResults(CharSequence的约束,
FilterResults结果){
filteredData =(ArrayList的< ProfileBean>)results.values;
notifyDataSetChanged();
}
}
解决方案
试试这个办法,希望这将帮助你解决你的问题。
首页片段
公共类HomeActivity扩展片段{
字符串国code;
ArrayList的< ProfileBean> catagery;
搜索的EditText;
AdaptorClass适配器;
公共静态字符串Bussinessurl; 公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){
super.onCreate(savedInstanceState); 查看rootView = inflater.inflate(R.layout.homeactivity,集装箱,FALSE);
//Log.i(\"homeurl,http://chabu.agicent.com/api/v1/get_business?token=+ Login.USERTOKEN.toString());
搜索=(EditText上)rootView.findViewById(R.id.search); catagery =新的ArrayList< ProfileBean>();
新JSONAsyncTask()
.execute(Login.AllChabu); ListView控件列表视图=(ListView控件)rootView.findViewById(R.id.list);
适配器=新AdaptorClass(getActivity(),catagery);
listview.setItemsCanFocus(假);
listview.setTextFilterEnabled(真);
listview.setAdapter(适配器);
国家code = GetCountryZip code();
Log.i(国code,国家code);
listview.setOnItemClickListener(新OnItemClickListener(){ @覆盖
公共无效onItemClick(适配器视图<>为arg0,ARG1查看,
INT位置,长的id){ //Toast.makeText(getActivity(),
// catagery.get(位置).getcategory_name(),Toast.LENGTH_LONG)
//。显示();
位置=位置+ 1;
Log.i(URL,Bussinessurl);
意图I =新意图(getActivity(),BusinessActivity.class);
startActivity(ⅰ);
}
}); search.addTextChangedListener(新TextWatcher(){ @覆盖
公共无效afterTextChanged(编辑为arg0){
字符串文本= search.getText()的toString()。
adapter.filter(文本);
} @覆盖
公共无效beforeTextChanged(CharSequence的为arg0,ARG1 INT,
INT ARG2,诠释ARG3){
} @覆盖
公共无效onTextChanged(CharSequence的为arg0,ARG1 INT,INT ARG2,诠释ARG3){
}
}); 返回rootView;
}
}
适配器类别
公共类AdaptorClass延伸BaseAdapter {
私人列表< ProfileBean> originalData;
私人列表< ProfileBean> filteredData;
私人上下文的背景下; 公共AdaptorClass(上下文的背景下,ArrayList的< ProfileBean> originalData){
this.context =背景;
this.originalData = originalData;
filteredData =新的List< ProfileBean>();
filteredData.addAll(this.originalData);
} @覆盖
公众诠释的getCount(){
返回filteredData.size();
} @覆盖
公共对象的getItem(INT位置){
返回filteredData.get(位置);
} @覆盖
众长getItemId(INT位置){
返回的位置;
}
@覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
ViewHolder持有人;
如果(convertView == NULL){
持有人=新ViewHolder();
convertView = LayoutInflater.from(上下文).inflate(R.layout.row,NULL);
holder.tvDescription =(TextView中)convertView.findViewById(R.id.tvDescriptionn);
convertView.setTag(保持器);
}其他{
支架=(ViewHolder)convertView.getTag();
}
holder.tvDescription.setText(filteredData.get(位置).getcategory_name());
返回convertView;
} 类ViewHolder {
公众的TextView tvDescription;
} 公共无效过滤器(字符串charText){
filteredData.clear();
如果(charText.length()== 0){
filteredData.addAll(originalData);
}其他{
对于(ProfileBean豆:originalData){
如果(bean.getcategory_name()。与toLowerCase()。含有(charText.toLowerCase())){
filteredData.add(豆);
}
}
}
notifyDataSetChanged();
}
}
i have an app in which i am displaying data from json into listview,and now want to apply searching functionality on the listview.but whenever i typing something in the editbox get an error array index out of bound.please help me to sort it out.
HomeActivity
public class HomeActivity extends Fragment {
String countryCode;
ArrayList<ProfileBean> catagery;
EditText search;
AdaptorClass adapter;
public static String Bussinessurl;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//setContentView(R.layout.homeactivity);
View rootView = inflater.inflate(R.layout.homeactivity, container, false);
//Log.i("homeurl", "http://chabu.agicent.com/api/v1/get_business?token=" +Login.USERTOKEN.toString());
search=(EditText)rootView.findViewById(R.id.search);
catagery = new ArrayList<ProfileBean>();
new JSONAsyncTask()
.execute(Login.AllChabu);
ListView listview = (ListView)rootView. findViewById(R.id.list);
adapter = new AdaptorClass(getActivity(), R.layout.row,
catagery);
listview.setItemsCanFocus(false);
//listview.setOnItemClickListener(this);
listview.setTextFilterEnabled(true);
listview.setAdapter(adapter);
countryCode = GetCountryZipCode();
Log.i("country code", countryCode);
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long id) {
// TODO Auto-generated method stub
//Toast.makeText(getActivity(),
// catagery.get(position).getcategory_name(), Toast.LENGTH_LONG)
//.show();
position = position+1;
Log.i("url", Bussinessurl);
Intent i= new Intent( getActivity(), BusinessActivity.class);
startActivity(i);
}
});
search.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
search.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
adapter.getFilter().filter(s.toString());
}
});
}
});
return rootView;
}
AdaptorClass
public class AdaptorClass extends ArrayAdapter<ProfileBean> implements Filterable {
private List<ProfileBean> originalData = null;
private List<ProfileBean> filteredData = null;
LayoutInflater vi;
int Resource;
ViewHolder holder;
private ItemFilter mFilter = new ItemFilter();
public AdaptorClass(Context context, int resource,
ArrayList<ProfileBean> objects) {
super(context, resource, objects);
vi = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Resource = resource;
//actorList = objects;
this.filteredData = objects;
this.originalData = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
holder = new ViewHolder();
v = vi.inflate(Resource, null);
holder.tvDescription = (TextView) v
.findViewById(R.id.tvDescriptionn);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
holder.tvDescription
.setText(filteredData.get(position).getcategory_name());
return v;
}
static class ViewHolder {
public TextView tvDescription;
}
public android.widget.Filter getFilter() {
return mFilter;
}
private class ItemFilter extends android.widget.Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String filterString = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
final List<ProfileBean> list = originalData;
int count = list.size();
Log.i("count", String.valueOf(count));
final ArrayList<ProfileBean> nlist = new ArrayList<ProfileBean>(count);
String filterableString;
for (int i = 0; i <count; i++) {
ProfileBean bean = list.get(i);
filterableString = bean.getcategory_name();
if (filterableString.toLowerCase().contains(
filterString.toString().toLowerCase())) {
nlist.add(bean);
}
}
results.values = nlist;
results.count = nlist.size();
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
filteredData = (ArrayList<ProfileBean>) results.values;
notifyDataSetChanged();
}
}
解决方案
Try this way,hope this will help you to solve your problem.
Home Fragment
public class HomeActivity extends Fragment {
String countryCode;
ArrayList<ProfileBean> catagery;
EditText search;
AdaptorClass adapter;
public static String Bussinessurl;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View rootView = inflater.inflate(R.layout.homeactivity, container, false);
//Log.i("homeurl", "http://chabu.agicent.com/api/v1/get_business?token=" +Login.USERTOKEN.toString());
search = (EditText) rootView.findViewById(R.id.search);
catagery = new ArrayList<ProfileBean>();
new JSONAsyncTask()
.execute(Login.AllChabu);
ListView listview = (ListView) rootView.findViewById(R.id.list);
adapter = new AdaptorClass(getActivity(), catagery);
listview.setItemsCanFocus(false);
listview.setTextFilterEnabled(true);
listview.setAdapter(adapter);
countryCode = GetCountryZipCode();
Log.i("country code", countryCode);
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long id) {
//Toast.makeText(getActivity(),
// catagery.get(position).getcategory_name(), Toast.LENGTH_LONG)
//.show();
position = position + 1;
Log.i("url", Bussinessurl);
Intent i = new Intent(getActivity(), BusinessActivity.class);
startActivity(i);
}
});
search.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
String text = search.getText().toString();
adapter.filter(text);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {
}
});
return rootView;
}
}
Adapter Class
public class AdaptorClass extends BaseAdapter {
private List<ProfileBean> originalData;
private List<ProfileBean> filteredData;
private Context context;
public AdaptorClass(Context context,ArrayList<ProfileBean> originalData) {
this.context=context;
this.originalData = originalData;
filteredData =new List<ProfileBean>();
filteredData.addAll(this.originalData);
}
@Override
public int getCount() {
return filteredData.size();
}
@Override
public Object getItem(int position) {
return filteredData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.row, null);
holder.tvDescription = (TextView) convertView.findViewById(R.id.tvDescriptionn);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvDescription.setText(filteredData.get(position).getcategory_name());
return convertView;
}
class ViewHolder {
public TextView tvDescription;
}
public void filter(String charText) {
filteredData.clear();
if (charText.length() == 0) {
filteredData.addAll(originalData);
} else {
for (ProfileBean bean : originalData) {
if (bean.getcategory_name().toLowerCase().contains(charText.toLowerCase())) {
filteredData.add(bean);
}
}
}
notifyDataSetChanged();
}
}
这篇关于搜索获得的数组出指数势必异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文