마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Json파싱해서 리스트뷰로 뿌린것을 검색하고 싶습니다.

0 추천

AsynTask를 이용해서 Json 파싱한 내용을 리스트뷰에 뿌린후에

리스트뷰 검색을 응용하고 싶습니다.

현재 상태로는 ListViewAdapter에서 필터를 만들어서 하는건데 이게 검색어를 입력하면 리스트뷰에 뜨지를 않습니다.

아마도 파싱한 내용을 onPostExecute에서 진행하는데 이게 안맞아서 그런것 같아요 ㅠㅠ

파싱한 리스트뷰를 검색하고 싶을때는 어떻게 해야될까요??


public class MainActivity extends Activity {

	ListView list;
	EditText editSearch;
	JsonListAdapter adapter;

	ArrayList<JsonBean> arraylist = new ArrayList<JsonBean>();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.jong_vet_main);

		list = (ListView) findViewById(R.id.list);
		
		
		// 검색
		new ReadJsonParser()
				.execute("파싱할사이트");

		adapter = new JsonListAdapter(this, arraylist);
		list.setAdapter(adapter);
		
		editSearch = (EditText) findViewById(R.id.search_edit);
		editSearch.addTextChangedListener(new TextWatcher() {

			@Override
			public void onTextChanged(CharSequence s, int start, int before,
					int count) {
				// TODO Auto-generated method stub

			}

			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
				// TODO Auto-generated method stub

			}

			@Override
			public void afterTextChanged(Editable s) {
				// TODO Auto-generated method stub
				String text = editSearch.getText().toString()
						.toLowerCase(Locale.getDefault());
				adapter.filter(text);
			}
		});
	}

	private class ReadJsonParser extends AsyncTask<String, String, String> {
		@Override
		protected String doInBackground(String... urls) {
			HttpClient httpclient = new DefaultHttpClient();
			StringBuilder builder = new StringBuilder();
			HttpPost httppost = new HttpPost(urls[0]);
			try {
				HttpResponse response = httpclient.execute(httppost);
				StatusLine statusLine = response.getStatusLine();
				int statusCode = statusLine.getStatusCode();
				if (statusCode == 200) {
					HttpEntity entity = response.getEntity();
					InputStream content = entity.getContent();
					BufferedReader reader = new BufferedReader(
							new InputStreamReader(content, "euc-kr"));
					String line;
					while ((line = reader.readLine()) != null) {
						builder.append(line);
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			Log.i("!!!", builder.toString());
			return builder.toString();
		}

		@Override
		protected void onPostExecute(String result) {
			try {
				
				//check				
			
				
				arraylist.clear();
				JSONArray petHospitalArray = new JSONArray(result);
				for (int i = 0; i < petHospitalArray.length(); i++) {
					JSONObject jObject = petHospitalArray.getJSONObject(i);
					JsonBean mJson = new JsonBean();

					String latitude = "";
					String longitude = "";
					String name = "";
					String address = "";
					String tel = "";

					latitude = jObject.getString("위도");
					longitude = jObject.getString("경도");
					name = jObject.getString("병원명");
					address = jObject.getString("소재지도로명주소");
					tel = jObject.getString("연락처");

					mJson.setLatitude(latitude);
					mJson.setLongitude(longitude);
					mJson.setName(name);
					mJson.setAddress(address);
					mJson.setTel(tel);

					arraylist.add(mJson);

				}

				adapter.notifyDataSetChanged();
			

			} catch (JSONException e) {
				e.printStackTrace();
			}

		}

	}

}

 

 


public class JsonListAdapter extends BaseAdapter {

	Context mContext;
	LayoutInflater inflater;
	private List<JsonBean> myjsonlist = null;
	private ArrayList<JsonBean> arraylist;

	public JsonListAdapter(Context context, List<JsonBean> myjsonlist) {
		mContext = context;
		this.myjsonlist = myjsonlist;
		inflater = LayoutInflater.from(mContext);
		this.arraylist = new ArrayList<JsonBean>();
		this.arraylist.addAll(myjsonlist);
	}

	public class ViewHolder {
		TextView latitudeText;
		TextView longitudeText;
		TextView nameText;
		TextView addressText;
		TextView tellText;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return myjsonlist.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return myjsonlist.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub

		final ViewHolder holder;

		if (convertView == null) {
			holder = new ViewHolder();
			convertView = inflater.inflate(R.layout.jong_vetlist, null);

			// Locate the Textviews
			holder.latitudeText = (TextView) convertView
					.findViewById(R.id.latitude_text);
			holder.longitudeText = (TextView) convertView
					.findViewById(R.id.longitude_text);
			holder.nameText = (TextView) convertView
					.findViewById(R.id.name_text);
			holder.addressText = (TextView) convertView
					.findViewById(R.id.address_text);
			holder.tellText = (TextView) convertView
					.findViewById(R.id.tel_text);

			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		// Set the results into TextViews
		holder.latitudeText.setText(myjsonlist.get(position).getLatitude());
		holder.longitudeText.setText(myjsonlist.get(position).getLongitude());
		holder.nameText.setText(myjsonlist.get(position).getName());
		holder.addressText.setText(myjsonlist.get(position).getAddress());
		holder.tellText.setText(myjsonlist.get(position).getTel());

		final String name = myjsonlist.get(position).getName();
		final String latitude = myjsonlist.get(position).getLatitude();
		final String longitude = myjsonlist.get(position).getLongitude();
		final String address = myjsonlist.get(position).getAddress();
		final String tel = myjsonlist.get(position).getTel();

		convertView.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub

				Intent intent = new Intent(mContext,
						jong.example.jsonex.HospitalContentActivity.class);
				intent.putExtra("latitude", (myjsonlist.get(position).getLatitude()));
				intent.putExtra("longitude", (myjsonlist.get(position).getLongitude()));
				intent.putExtra("name", (myjsonlist.get(position).getName()));
				intent.putExtra("address", (myjsonlist.get(position).getAddress()));
				intent.putExtra("tel", (myjsonlist.get(position).getTel()));
				
				mContext.startActivity(intent);
			}
		});

		return convertView;
	}
	
	// Filter Class

	public void filter(String charText) {
		charText = charText.toLowerCase(Locale.getDefault());
		myjsonlist.clear();
		if (charText.length() == 0) {
			myjsonlist.addAll(arraylist);
		} else {
			for (JsonBean jb : arraylist) {
				if (jb.getName().toLowerCase(Locale.getDefault())
						.contains(charText)) {
					myjsonlist.add(jb);
				}
			}
		}
		notifyDataSetChanged();
	}

}

 

SuperPro (860 포인트) 님이 2015년 1월 17일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...