2013-07-24 1 views
2

나는 안드로이드 개발을 처음 접했다. mainactivity에서 JSON을 사용할 때 아무 문제가 없지만 코드를 ListFragment로 옮길 때 문제가 발생했습니다.안드로이드 JSON in ListFragment

이 줄은 아무 것도 발생하지 않습니다. JSONObject json = userFunctions.announcementFeed (myID, myType);

package com.example.demo123; 
import java.util.ArrayList; 
import java.util.HashMap; 
import library.UserFunctions; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import android.os.Bundle; 
import android.support.v4.app.ListFragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.SimpleAdapter; 

public class AnnouncementList extends ListFragment { 
private static final String TAG = "MyAnnouncement"; 

JSONArray announcementList = null;    
UserFunctions userFunctions; 

String myID = MainActivity.myID; 
String myType = MainActivity.myType; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {  
    return super.onCreateView(inflater, container, savedInstanceState); 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    Log.i(TAG,"START ANNOUNCEMENT LIST"); 

    ArrayList<HashMap<String, String>> theAnnnouncement = new ArrayList<HashMap<String, String>>(); 
    JSONObject json = userFunctions.announcementFeed(myID, myType); 

    try { 
     if (json.getString("success") != null) { 
      announcementList = json.getJSONArray("announceDT"); 
      for (int i = 0; i < announcementList.length(); i++) { 
       JSONObject c = announcementList.getJSONObject(i); 
       String title = c.getString("topic"); 
       String course = c.getString("course") + " - " + c.getString("courseTitle"); 
       String created = "By " + c.getString("entered_by") + " | " + c.getString("entry_date"); 

       HashMap<String, String> map = new HashMap<String, String>(); 
       map.put("title", title); 
       map.put("course", course); 
       map.put("created", created); 

       theAnnnouncement.add(map); 
      } 
     }     
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    String[] from = { "title","course","created" }; 
    int[] to = { R.id.title,R.id.course,R.id.created}; 

    SimpleAdapter adapter = new SimpleAdapter(getActivity().getBaseContext(), theAnnnouncement, R.layout.list_item, from, to);    
    setListAdapter(adapter);   
} 

}

+0

LogCat이란 무엇입니까? 귀하의 announcementFeed() 함수는 무엇을하고 있습니까? 모든 네트워킹? 좀 더 자세한 내용이 도움이 될 것입니다 –

+0

@JadeByfield 여기 logcat을 볼 수 있습니다 http://www.letmecode.com/tmp/log.txt – iQbal

+0

announcementFeed()에 대한 @JadeByfield : http://www.letmecode.com/tmp /announcement.txt – iQbal

답변

1

이 왜 onActivityCreated에 그 논리를 넣어 절대적으로 필요하다 : 여기

전체 코드? 그 시점에서 조각이 완전히 초기화되지 않으므로 논리를 onResume 또는 다른 위치로 옮길 수 있습니다.

EDIT : announcementFeed() 메소드뿐만 아니라 연결된 코드를 살펴 보았습니다.

주 스레드에서이 방법으로 네트워킹을 시도하는 것처럼 보입니다.

public JSONObject announcementFeed(String username, String userType){ 
    .................................. 

    JSONObject json = jsonParser.getJSONFromUrl(loginURL, params); 
    // return json 
    return json; 
} 

이 방법은 onActivityCreated에서 호출합니다. 이것을 배경 스레드 또는 AsyncTask으로 옮기는 것이 좋습니다. LogCat이 없어도 100 % 확신 할 수는 없지만, 적어도 우리는 그것을 밖으로 지적 할 수 있습니다.

+0

감사합니다! 나는 AsyncTask를 시도 할 것이다. 여기 Btw는 logcat http://www.letmecode.com/tmp/log.txt입니다. – iQbal