Java Android AutoCompleteTextView在发布版本中崩溃应用程序
我正在使用AutoCompleteTextView从服务器获取动态数据。调试生成在版本中生成异常时平稳运行Java Android AutoCompleteTextView在发布版本中崩溃应用程序,java,android,autocomplete,Java,Android,Autocomplete,我正在使用AutoCompleteTextView从服务器获取动态数据。调试生成在版本中生成异常时平稳运行 java.lang.NullPointerException: throw with null exception at c10.getView(SourceFile:50) at android.widget.AbsListView.obtainView(AbsListView.java:2367) at android.widget.Dr
java.lang.NullPointerException: throw with null exception
at c10.getView(SourceFile:50)
at android.widget.AbsListView.obtainView(AbsListView.java:2367)
at android.widget.DropDownListView.obtainView(DropDownListView.java:305)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1326)
at android.widget.ListPopupWindow.buildDropDown(ListPopupWindow.java:1233)
at android.widget.ListPopupWindow.show(ListPopupWindow.java:596)
at android.widget.AutoCompleteTextView.showDropDown(AutoCompleteTextView.java:1215)
at android.widget.AutoCompleteTextView.updateDropDownForFilter(AutoCompleteTextView.java:1084)
at android.widget.AutoCompleteTextView.onFilterComplete(AutoCompleteTextView.java:1066)
at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:285)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:165)
at android.app.ActivityThread.main(ActivityThread.java:6375)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
我保留了在自动完成适配器中使用的模型
-keep public www.example.MyModel {
public *** get*();
public void set*(***);
}
在build.gradle文件中启用minify并将资源收缩为false
使其正常工作,但在启用这些功能时,会导致应用程序崩溃,出现上述异常。
我应该如何使用minifyEnabled和shrinkResources true解决此问题
我正在使用以下适配器
public class MyAdapter extends ArrayAdapter<MyModel> {
Context context;
int resource, textViewResourceId;
List<MyModel> items, tempItems, suggestions;
public MyAdapter(Context context, int resource, int textViewResourceId, List<MyModel> items) {
super(context, resource, textViewResourceId, items);
this.context = context;
this.resource = resource;
this.textViewResourceId = textViewResourceId;
this.items = items;
tempItems = new ArrayList<MyModel>(items); // this makes the difference.
suggestions = new ArrayList<MyModel>();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.row, parent, false);
}
MyModel mymodel = items.get(position);
if (mymodel != null) {
TextView lblName = (TextView) view.findViewById(R.id.tv_site_name);
if (lblName != null)
lblName.setText(mymodel.getName());
TextView lblAddress = (TextView) view.findViewById(R.id.tv_site_title);
if (lblAddress != null)
lblAddress.setText(mymodel.getAddress().getAddress());
}
return view;
}
@Override
public Filter getFilter() {
return nameFilter;
}
@Override
public MyModel getItem(int index) {
return items.get(index);
}
/**
* Custom Filter implementation for custom suggestions we provide.
*/
Filter nameFilter = new Filter() {
@Override
public CharSequence convertResultToString(Object resultValue) {
String str = ((MyModel) resultValue).getName();
return str;
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
suggestions.clear();
//filter method logic goes here
for (MyModel people : tempItems) {
if (people.getName().toLowerCase().startsWith(constraint.toString().toLowerCase())) {
suggestions.add(people);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = suggestions;
filterResults.count = suggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
List<MyModel> filterList = (ArrayList<MyModel>) results.values;
if (results != null && results.count > 0) {
clear();
for (MyModel people : filterList) {
add(people);
notifyDataSetChanged();
}
}
}
};
}
公共类MyAdapter扩展了ArrayAdapter{
语境;
int资源,textViewResourceId;
列出项目、临时项目、建议;
公共MyAdapter(上下文上下文、int资源、int textViewResourceId、列表项){
超级(上下文、资源、textViewResourceId、项目);
this.context=上下文;
这个资源=资源;
this.textViewResourceId=textViewResourceId;
这个项目=项目;
tempItems=newarraylist(items);//这会产生不同。
建议=新建ArrayList();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=转换视图;
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视图=充气机。充气(R.layout.row,父级,false);
}
MyModel MyModel=items.get(位置);
if(mymodel!=null){
TextView lblName=(TextView)view.findViewById(R.id.tv\u站点名称);
如果(lblName!=null)
lblName.setText(mymodel.getName());
TextView lblAddress=(TextView)view.findViewById(R.id.tv\u site\u title);
如果(lblAddress!=null)
lblAddress.setText(mymodel.getAddress().getAddress());
}
返回视图;
}
@凌驾
公共过滤器getFilter(){
返回名称过滤器;
}
@凌驾
公共MyModel getItem(int索引){
返回项目。获取(索引);
}
/**
*我们提供的自定义建议的自定义筛选器实现。
*/
过滤器名称过滤器=新过滤器(){
@凌驾
public CharSequence ConvertResultString(对象结果值){
字符串str=((MyModel)resultValue.getName();
返回str;
}
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
if(约束!=null){
建议。清晰();
//过滤方法逻辑在这里
对于(MyModel人员:临时项目){
if(people.getName().toLowerCase().startsWith(constraint.toString().toLowerCase())){
建议。添加(人);
}
}
FilterResults FilterResults=新的FilterResults();
filterResults.values=建议;
filterResults.count=建议.size();
返回过滤器结果;
}否则{
返回新的FilterResults();
}
}
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
List filterList=(ArrayList)results.values;
if(results!=null&&results.count>0){
清除();
for(MyModel人员:过滤器列表){
增加(人);
notifyDataSetChanged();
}
}
}
};
}
它在调试构建或将minifyEnabled和shrinkResources设置为false时可以正常工作MyAdapter.java的第50行是什么