[英]Search View for a Listview - get data from server in json format
Hi developers :) I'm a student, and i'm beginning to implement a search view in Android. 嗨开发人员:)我是学生,我开始在Android中实现搜索视图。 I have problem to implement search view.
我有实现搜索视图的问题。 I have finished to code, and have been success to view data from server,
我已完成代码,并成功查看来自服务器的数据,
but I get an error (unfortunately stopped) when I start to input some text in EditText (seacrh view).
但是当我开始在EditText(seacrh视图)中输入一些文本时,我得到一个错误(不幸停止)。 Would somebody help me?
有人会帮助我吗? Give some advices, please..
请给我一些建议..
Thank you.. 谢谢..
Log Error :
日志错误:
Process: com.rumahkasihindonesia.kasihgroup.posrki, PID: 9842 java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.Iterator java.util.ArrayList.iterator()' on a null object reference at com.rumahkasihindonesia.kasihgroup.posrki.adapter.ItemAdapter.filter(ItemAdapter.java:116)进程:com.rumahkasihindonesia.kasihgroup.posrki,PID:9842 java.lang.NullPointerException:尝试在com.rumahkasihindonesia的空对象引用上调用虚方法'java.util.Iterator java.util.ArrayList.iterator()'。 kasihgroup.posrki.adapter.ItemAdapter.filter(ItemAdapter.java:116)
This is my code: 这是我的代码:
ItemAdapter.java ItemAdapter.java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.rumahkasihindonesia.kasihgroup.posrki.activity.ItemsActivity;
import com.rumahkasihindonesia.kasihgroup.posrki.model.ModelItems;
import com.rumahkasihindonesia.kasihgroup.posrki.R;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
/**
* Created by putri-pc on 6/29/2016.
*/
public class ItemAdapter extends BaseAdapter {
private List<ModelItems> modelItemList;
ArrayList<HashMap<String, String>> data;
private Context context;
private ArrayList<ModelItems> arraylistitem;
LayoutInflater inflater;
ItemsActivity main;
public ItemAdapter(ItemsActivity main)
{
this.main = main;
}
public ItemAdapter(Context context,
ArrayList<HashMap<String, String>> arraylist) {
this.context = context;
data = arraylist;
this.arraylistitem = new ArrayList<ModelItems>();
this.arraylistitem.addAll(modelItemList);
}
@Override
public int getCount() {
return main.itemsModel.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
static class ViewHolderItem {
TextView nameItem;
TextView priceItem;
ImageView imageItem;
}
// @Override
public View getView(final int position, View convertView, ViewGroup parent){
ViewHolderItem holder = new ViewHolderItem();
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) main.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item, null);
holder.nameItem = (TextView) convertView.findViewById(R.id.item_name);
holder.priceItem = (TextView) convertView.findViewById(R.id.item_price);
holder.imageItem = (ImageView) convertView.findViewById(R.id.imgItem);
convertView.setTag(holder);
}
else
{
holder = (ViewHolderItem) convertView.getTag();
}
holder.priceItem.setText(this.main.itemsModel.get(position).getPrice());
holder.nameItem.setText(this.main.itemsModel.get(position).getName());
}
// Filter Class
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
this.main.itemsModel.clear();
if (charText.length() == 0) {
this.main.itemsModel.addAll(arraylistitem);
}
else
{
for (ModelItems wp : arraylistitem)
{
if (wp.getName().toLowerCase(Locale.getDefault()).contains(charText))
{
this.main.itemsModel.add(wp);
}
}
}
notifyDataSetChanged();
}
} }
package com.rumahkasihindonesia.kasihgroup.posrki.activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.StrictMode;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.widget.SwipeRefreshLayout;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.rumahkasihindonesia.kasihgroup.posrki.R;
import com.rumahkasihindonesia.kasihgroup.posrki.adapter.ItemAdapter;
import com.rumahkasihindonesia.kasihgroup.posrki.model.ModelItems;
import com.rumahkasihindonesia.kasihgroup.posrki.service.ServiceHandler;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Locale;
public class ItemsActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
SwipeRefreshLayout swLayout;
LinearLayout llayout;
// URL to get contacts JSON
private static String url = "http://10.160.1.35:84/posrkidev/web/index.php/api/inventory";
public String idcategory;
public String namecategory;
public String id_mom,idItem,idCategory,idMom,name,price,active,userinsert,dateinsert,userupdate,dateupdate, pic1,pic2,categoryitem;
final Context _context = this;
public TextView output;
final Context context = this;
public ListView list;
public ArrayList<ModelItems> itemsModel = new ArrayList<ModelItems>();
public ItemAdapter adapter;
private ModelItems itemModel;
ProgressDialog pDialog;
EditText inputSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_items);
//JSON
if(android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();
//LISTVIEW
list = (ListView) findViewById(R.id.listItems);
adapter = new ItemAdapter(this);
list.setAdapter(adapter);
//
inputSearch = (EditText) findViewById(R.id.inputSearch);
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);
Log.d("Response: ", "> " + jsonStr);
if (jsonStr != null) {
try {
JSONArray jsonarray = new JSONArray(jsonStr);
for (int i = 0; i < jsonarray.length(); i++) {
final JSONObject jsonobject = jsonarray.getJSONObject(i);
idItem = jsonobject.getString("ID_Item");
idCategory = jsonobject.getString("Item_Name");
idMom = jsonobject.getString("ID_Mom");
name = jsonobject.getString("Item_Price");
categoryitem = jsonobject.getString("ID_Inv_Category");
pic1 = jsonobject.getString("Item_PIC1");
pic2 = jsonobject.getString("Item_PIC2");
price = jsonobject.getString("Item_active");
userinsert = jsonobject.getString("insert_user");
dateinsert = jsonobject.getString("insert_date");
userupdate = jsonobject.getString("update_user");
dateupdate = jsonobject.getString("update_date");
ModelItems add=new ModelItems();
add.setId(jsonobject.getString("ID_Item"));
add.setName(jsonobject.getString("Item_Name"));
add.setIdMom(jsonobject.getString("ID_Mom"));
add.setPrice(jsonobject.getString("Item_Price"));
add.setActive(jsonobject.getString("Item_active"));
add.setPic1(jsonobject.getString("Item_PIC1"));
add.setPic2(jsonobject.getString("Item_PIC2"));
add.setIdCategory(jsonobject.getString("ID_Inv_Category"));
add.setInsert_user(jsonobject.getString("insert_user"));
add.setInsert_date(jsonobject.getString("insert_date"));
add.setUpdate_user(jsonobject.getString("update_user"));
add.setUpdate_date(jsonobject.getString("update_date"));
itemsModel.add(add);
}
adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
/**
* Enabling Search Filter
* */
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
String text = inputSearch.getText().toString().toLowerCase(Locale.getDefault());
adapter.filter(text);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
});
// Inisialisasi SwipeRefreshLayout
swLayout = (SwipeRefreshLayout) findViewById(R.id.swlayout);
llayout = (LinearLayout) findViewById(R.id.ll_swiperefresh);
swLayout.setColorSchemeResources(R.color.colorAccent,R.color.colorPrimary);
swLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// Handler untuk menjalankan jeda selama 5 detik
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// Berhenti berputar/refreshing
swLayout.setRefreshing(false);
Intent intent = new Intent(ItemsActivity.this, ItemsActivity.class);
startActivity(intent);
}
}, 1000);
}
});
}
@Override
public void onBackPressed() {
Intent intent = new Intent(ItemsActivity.this, MasterDataActivity.class);
startActivity(intent);
}
}
You have 2 public constructors for this Adapter. 这个适配器有2个公共构造函数。 You are using the first one in ItemsActivity on the line
adapter = new ItemAdapter(this);
您正在使用第一个在ItemsActivity上的行
adapter = new ItemAdapter(this);
. 。 This constructor doesn't initialize the field
arraylistitem
in ItemAdapter, which is why your app crashes when it tries to access arraylistitem
. 此构造函数不会在ItemAdapter中初始化字段
arraylistitem
,这就是为什么您的应用程序在尝试访问arraylistitem
时崩溃的原因。 You could repeat the line this.arraylistitem = new ArrayList<ModelItems>();
你可以重复一行
this.arraylistitem = new ArrayList<ModelItems>();
in your first contructor to solve this, or use the second one. 在你的第一个构造中解决这个问题,或使用第二个。
I think you have to write code in onTextChanged like below: 我想你必须在onTextChanged中编写代码,如下所示:
String text = arg0;
adapter.filter(text);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.