서버에서 받아온 값 리스트에 저장하고 검색하기
조회수 796회
서버에서 값을 받아오는건 확인했는데 저기 Asynctask에서 추가한 항목이 검색기능에 잡히지를 않네요..ㅠㅠ onCreate에 list.add("항목") 이런식으로 추가해주면 문제 없이 하는데 Asynctask에서는 이런 문제를 어떻게 해결해야 하는지 모르겠습니다..ㅠㅠ
onCreate부분 입니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activitiy_address_group);
editSearch = (EditText) findViewById(R.id.address_group_edtadd);
listView = (ListView) findViewById(R.id.address_group_addlist);
list = new ArrayList<>();
Tablename = new ArrayList<>();
// 리스트를 생성한다.
//서버 전송 class
InsertData task = new InsertData();
task.execute("serverURL");
// 검색에 사용할 데이터을 미리 저장한다.
//settingList();
// 리스트의 모든 데이터를 arraylist에 복사한다.// list 복사본을 만든다.
arraylist = new ArrayList<String>();
arraylist.addAll(list);
// 리스트에 연동될 아답터를 생성한다.
adapter = new AddressGroupAdapter(list, this);
// 리스트뷰에 아답터를 연결한다.
listView.setAdapter(adapter);
// input창에 검색어를 입력시 "addTextChangedListener" 이벤트 리스너를 정의한다.
editSearch.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void afterTextChanged(Editable editable) {
// input창에 문자를 입력할때마다 호출된다.
// search 메소드를 호출한다.
String text = editSearch.getText().toString();
search(text);
}
});
}
이부분이 서버에서 값을 받아오는 부분입니다.
class InsertData extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try {
JSONObject Land = new JSONObject(result);
JSONArray jsonArray = Land.getJSONArray("Response");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject subJsonObject = jsonArray.getJSONObject(i);
String TableName = subJsonObject.getString("serverURL");
Tablename.add(TableName);
namelist = Tablename.get(i);
list.add(TableName); //서버에서 받은 값을 list에 추가
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
소스만 보고 추측해보자면... AsyncTask에서 데이터를 불러와서 list에 담기 전에 메인쓰레드에서 list가 Adapter에 담겨서 리스트뷰에 바인딩 되는 것 같습니다.
adapter = new AddressGroupAdapter(list, this);
listView.setAdapter(adapter);
두 행을 onPostExecute안에 넣어보면 되지 않을까 싶은데요.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력