ListFragment를 이용해서 json으로 받은 데이터를 adapter로 커스텀 리스트뷰를 만들려고 하는데 로그로 디비에서 데이터를 가져오는거 까지는 되는데 저장이랑 화면에 뿌려주는게 왜 안되는지 모르겠네요 ㅠㅠ
로그로 찍어보니까 count가 0이 찍히는건 데이터가 안들어가는거겠죠??
json에서 데이터를 가져와서 넣어주는 소스입니다.
public class StunoteFragment extends ListFragment {
private String url = "ip주소";
private String jsonResult;
ListViewAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Adapter 생성 및 Adapter 지정.
adapter = new ListViewAdapter() ;
JsonReadTask task = new JsonReadTask();
setListAdapter(adapter) ;
task.execute(url);
Log.e("msg",adapter.getCount()+"");
return super.onCreateView(inflater, container, savedInstanceState);
}
private class JsonReadTask extends AsyncTask<String,Void,String> {
String errorString = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try{
JSONObject jsonResponse = new JSONObject(result);
JSONArray jsonMainNode = jsonResponse.optJSONArray("major_document");
for(int i = 0;i<jsonMainNode.length();i++)
{
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);//json 형식으로 오브젝트하나를 받아와서 '제목만'받아옴
String md_srl = jsonChildNode.optString("module_srl");
String title = jsonChildNode.optString("title");
String content = jsonChildNode.optString("content");
int readed_count = jsonChildNode.optInt("readed_count");
String regDate = jsonChildNode.optString("regdate");
adapter.addItem(title,content,regDate,readed_count) ;
}
}catch(JSONException e){
Toast.makeText(getContext().getApplicationContext(),"Error" + e.toString(),Toast.LENGTH_SHORT).show();
}
}
@Override
protected String doInBackground(String... params) {
String serverURL = params[0];
try {
URL url = new URL(serverURL);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setReadTimeout(5000);
httpURLConnection.setConnectTimeout(5000);
httpURLConnection.connect();
int responseStatusCode = httpURLConnection.getResponseCode();
InputStream inputStream;
if(responseStatusCode == HttpURLConnection.HTTP_OK) {
inputStream = httpURLConnection.getInputStream();
}
else{
inputStream = httpURLConnection.getErrorStream();
}
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder sb = new StringBuilder();
String line;
while((line = bufferedReader.readLine()) != null){
sb.append(line);
}
bufferedReader.close();
return sb.toString().trim();
} catch (Exception e) {
errorString = e.toString();
return null;
}
}
}
}
이건 Adapter소스입니다
public class ListViewAdapter extends BaseAdapter{
// Adapter에 추가된 데이터를 저장하기 위한 ArrayList
private ArrayList<ListViewItem> listViewItemList = new ArrayList<ListViewItem>() ;
// ListViewAdapter의 생성자
public ListViewAdapter() {
}
// Adapter에 사용되는 데이터의 개수를 리턴. : 필수 구현
@Override
public int getCount() {
return listViewItemList.size() ;
}
// position에 위치한 데이터를 화면에 출력하는데 사용될 View를 리턴. : 필수 구현
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
final Context context = parent.getContext();
// "listview_item" Layout을 inflate하여 convertView 참조 획득.
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.stunote_content, parent, false);
}
// 화면에 표시될 View(Layout이 inflate된)으로부터 위젯에 대한 참조 획득
TextView titleTextView = (TextView) convertView.findViewById(R.id.Stu_notepad_title) ;
TextView descTextView = (TextView) convertView.findViewById(R.id.Stu_notepad_content) ;
TextView regDate = (TextView) convertView.findViewById(R.id.Stu_notepad_date);
TextView readedCount = (TextView) convertView.findViewById(R.id.Stu_notepad_view);
// Data Set(listViewItemList)에서 position에 위치한 데이터 참조 획득
ListViewItem listViewItem = listViewItemList.get(position);
// 아이템 내 각 위젯에 데이터 반영
titleTextView.setText(listViewItem.getTitle());
descTextView.setText(listViewItem.getDesc());
regDate.setText( listViewItem.getRegDate());
readedCount.setText(listViewItem.getReadedCount());
return convertView;
}
// 지정한 위치(position)에 있는 데이터와 관계된 아이템(row)의 ID를 리턴. : 필수 구현
@Override
public long getItemId(int position) {
return position ;
}
// 지정한 위치(position)에 있는 데이터 리턴 : 필수 구현
@Override
public Object getItem(int position) {
return listViewItemList.get(position) ;
}
// 아이템 데이터 추가를 위한 함수. 개발자가 원하는대로 작성 가능.
public void addItem(String title, String desc, String regDate, int readedCount) {
ListViewItem item = new ListViewItem();
item.setTitle(title);
item.setDesc(desc);
item.setRegDate(regDate);
item.setReadedCount(readedCount);
listViewItemList.add(item);
}
}
public class ListViewItem {
private String titleStr ;
private String contextStr ;
private String regDate;
private int readedCount;
public void setTitle(String title) {
titleStr = title ;
}
public void setDesc(String desc) {
contextStr = desc ;
}
public void setRegDate(String regDate){
this.regDate = regDate;
}
public void setReadedCount(int count){
readedCount = count;
}
public String getTitle() {
return this.titleStr ;
}
public String getDesc() {
return this.contextStr ;
}
public String getRegDate(){
return this.regDate;
}
public int getReadedCount(){
return this.readedCount;
}
}