2013-12-21 1 views
-1

i 내 액티비티 중 하나에서 조각을 사용하는 앱을 만들고 있습니다. 각 조각보기에서 필자는 각보기에서 세 개의 파일 인 세 개의 파일을 사용하여 데이터베이스에서 가져올 것입니다. 첫 번째 조각은 예상대로 작동합니다. 그러나, 내 json 파서 코드를 두 번째 스 와이프보기에 추가 할 때 작업이로드 될 때 즉시 시도 할 참조하십시오 (두 번째 스 와이프 뷰 토스트 확인) 및 json 파서 두 번째 뷰에 모든 데이터를로드하지 않습니다. . 주 활동에 JSON을 연결하고 뷰를 전환 할 때 어댑터와 URL을 전환해야합니까, 아니면 모든 조각에서 JSON을로드하려고해야합니까 (현재 제가하고있는 일입니다). 어떤 통찰력이라도 대단히 감사 할 것입니다. 감사합니다.파편을 사용하여 3 개의 json 피드를 얻으려고 시도합니다.

public class chatfragment extends Fragment { 

    ListView l; 
    List<chatitem> listItem; 
    ChatListAdapter adapter; 
    String category = "430"; 
    chatitem item; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.chatfragment, container, false); 

     l = (ListView) rootView.findViewById(R.id.chatlist); 
     listItem = new ArrayList<chatitem>(); 
     adapter = new ChatListAdapter(getActivity(),R.layout.chatfragment, listItem); 
     l.setAdapter(adapter); 

     new ReadWeatherJSONFeedTask().execute("myurl"); 

     return rootView; 
    } 

    public String readJSONFeed (String URL){ 
     StringBuilder stringBuilder = new StringBuilder(); 
     HttpClient httpClient = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(URL); 
     try{ 
      HttpResponse response = httpClient.execute(httpGet); 
      StatusLine statusLine = response.getStatusLine(); 
      int statusCode = statusLine.getStatusCode(); 
      if(statusCode == 200){ 
       HttpEntity entity = response.getEntity(); 
       InputStream inputStream = entity.getContent(); 
       BufferedReader reader = new BufferedReader(
       new InputStreamReader(inputStream)); 
       String line; 
       while ((line = reader.readLine()) !=null){ 
        stringBuilder.append(line); 
       } 
       inputStream.close(); 
      }else{ 
       Log.d("readJSONFeed", "Failed to download file"); 
      } 
     }catch (Exception e){ 
      Log.d("readJSONFeed", e.getLocalizedMessage()); 
     } 
     return stringBuilder.toString(); 
    } 

    private class ReadWeatherJSONFeedTask extends AsyncTask<String, Void, String>{ 
     protected String doInBackground(String...urls){ 
      return readJSONFeed(urls[0]); 
     } 
     protected void onPostExecute(String result){ 
      try{ 
       JSONObject jsonObject = new JSONObject(result); 
       JSONArray subcat = new 
       JSONArray(jsonObject.getString("results")); 
       for(int i = 0; i < subcat.length(); i++){ 
        JSONObject p = subcat.getJSONObject(i); 

        item = new chatitem(p.getString("hubusername"),p.getString("picture"),p.getString("timeadjust"),p.getString("comment")); 

        listItem.add(item); 

        // Toast.makeText(getApplicationContext(), p.getString("subcategory"), Toast.LENGTH_LONG).show(); 

        adapter.notifyDataSetChanged(); 
       } 
      }catch (Exception e){ 
       Log.d("ReadWeatherJSONFeedTask", e.getLocalizedMessage()); 
      } 

      // Toast.makeText(getApplicationContext(), "done", Toast.LENGTH_LONG).show(); 
     }; 
    } 
} 

답변

1

글쎄, 당신은 많은 일을 할 수 있습니다. 나는 활동에서 데이터 (웹 등에서 다운로드)를 준비한 다음 조각에로드하는 것이 좋습니다.

ViewPager는 현재 조각뿐만 아니라 목록의 다음 조각도 준비합니다. 이 문제에 문제가있는 경우 pageChangeListener를 사용하고 조각이 활성 상태 일 때 조각을 업데이트해야합니다.

+0

내 활동에 3 개의 JSON 파일을 다운로드하고 해당 배열 목록에로드 한 다음 해당보기로 전환하면 표시됩니다. 어떤 이유로 모든 병목 목을 볼 수 있습니다. 특히 모든 사용자가 세 조각을 모두 사용하지는 않기 때문에 클라이언트와 서버 모두에서 시스템 리소스를 낭비하고 있습니다. 프래그먼트 어댑터가 다음 프래그먼트를 평가하지 못하게 할 방법이 있습니까? – Dnaso

+0

사용자는 데이터 사용량을 줄이기 위해 속도를 선호합니다. 데이터 사용량을 억제하려면 wifi가 아닌 경우 회 전자를 표시 한 다음 해당 페이지에있을 때 dl을 시작하십시오. – Warpzit

+0

Warpzit 실제로 메모리 오버플로에 더 관심이 있습니다 ... 조각을 통해 슬쩍 할 때 안드로이드는 자동으로 메모리를 절약하기 위해 없애거나 메모리에서 풀 때까지 슬리 프 뷰의 메모리에 everyhting을 유지합니까? – Dnaso

관련 문제