2016-06-08 6 views
1

내 mysql 데이터베이스에서 제품 목록을로드하는 customadapter가있는 조각에 listview가 있습니다. 처음 탐색 용 서랍 활동에서 조각으로 이동할 때 항목을 표시하지 않지만 로그에 동일한 항목이 표시됩니다. 그러나 동일한 조각이 두 번째로 시작되면 모든 항목이 표시됩니다.안드로이드 ListView 처음 조각을 시작할 때 내용을 표시하지 않습니다

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_view_complain, container, false); 
    sharedPreferences = getActivity().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 
    new BackgroundViewComplainTask().execute(); 
    jsonString = sharedPreferences.getString("complain", ""); 
    complainList = (ListView)view.findViewById(R.id.list); 
    addComplain = (Button)view.findViewById(R.id.addComplain); 
    String productName, serial, complainType, complainMessage, added_on; 
    viewComplainAdapter = new ViewComplainAdapter(this.getActivity(), R.layout.complain_layout); 
    try { 
     Log.d("json",jsonString); 
     jsonObject = new JSONObject(jsonString); 
     jsonArray = jsonObject.getJSONArray("server_response"); 
     int count = 0; 
     ViewComplainsList viewComplainsList; 

     while (count<jsonArray.length()){ 
      JSONObject JO = jsonArray.getJSONObject(count); 
      productName = JO.getString("productName"); 
      serial = JO.getString("serial"); 
      complainType = JO.getString("complainType"); 
      complainMessage = JO.getString("complainMessage"); 
      added_on = JO.getString("added_on"); 
      viewComplainsList = new ViewComplainsList(complainMessage, complainType, productName, serial, added_on); 
      viewComplainAdapter.add(viewComplainsList); 
      count++; 
     } 
     complainList.setAdapter(viewComplainAdapter); 
     viewComplainAdapter.notifyDataSetChanged(); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    if(jsonString.isEmpty()){ 
     Toast.makeText(getActivity(),"No Complains found",Toast.LENGTH_LONG).show(); 
     this.startActivity(new Intent(getActivity(), MainActivity.class)); 
    } 
    addComplain.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      FragmentManager fragmentManager = getFragmentManager(); 
      fragmentManager.beginTransaction().replace(R.id.main_activity_frame, new AddComplainFragment()).addToBackStack("complainFragment").commit(); 
     } 
    }); 
    return view; 
} 

jsonString 로그 인쇄받을 않습니다 다음은 조각의 onCreateView()에서 내 코드입니다.

06-08 15 : 08 : 여기

내 활동 로그 인 27.450 10110-10110/com.example.thadaninilesh.productapp의 W/System.err에 : org.json.JSONException : 입력의 끝 08 : 10110-10110 27.450/com.example.thadaninilesh.productapp W/System.err에 : 06-08 (15)의 문자 0 org.json.JSONTokener.syntaxError (JSONTokener.java:450)에서 06-08 15 : 08 : 27.450 10110-10110/com.example.thadaninilesh.productapp 승/System.err : org.json.JSONTokener.nextValue (JSONTokener.java:97) 06-08 15 : 08 : 27.450 10110-10110/com .example.thadaninilesh.productapp 승/System.err : org.json.JSONObject. (JSONObject.java:156) 06 -08 15 : 08 : 27.450 10110-10110/com.example.thadaninilesh.productapp W/System.err : org.json.JSONObject. (JSONObject.java:173) 06-08 15 : 08 : 27.450 10110-10110 /com.example.thadaninilesh.productapp W/System.err : com.example.thadaninilesh.productapp.ViewComplainFragment.onCreateView (ViewComplainFragment.java:72) 06-08 15 : 08 : 27.450 10110-10110/com.example. thadaninilesh.productapp 승/System.err : android.app.Fragment.performCreateView (Fragment.java:2053) 06-08 15 : 08 : 27.450 10110-10110/com.example.thadaninilesh.productapp 승/System.err : android.app.FragmentManagerImpl.moveToState (FragmentManager.java:894) 06-08 15 : 08 : 27.450 10110-10110/com.example.thadaninilesh.productapp 승/System.err : android.app.FragmentManagerImpl.moveToState (FragmentManager.java:1067) 06-08 15 : 08 : 27.450 10110-10110/com.example.thadaninilesh.productapp W /System.err : at android.app.BackStackRecord.run (BackStackRecord.java:834) 06-08 15 : 08 : 27.450 10110-10110/com.example.thadaninilesh.productapp 승/System.err : android.app .FragmentManagerImpl.execPendingActions (FragmentManager.java:1452) 06-08 15 : 08 : 27.450 10110-10110/com.example.thadaninilesh.productapp 승/System.err : android.app.FragmentManagerImpl $ 1.run (FragmentManager.java : 447) 06-08 15 : 08 : 27.450 10110-10110/com.example.thadaninilesh.productapp 승/System.err : android.os.Handler.handleCallback (Handler.java:739) 06-08 15 : 08 : 27.450 10110-10110/com.example.thadaninilesh.productapp 승/System.err : android.os.Handler.dispatchMessage (Handler.java:95) 06-08 15 : 08 : 27.450 10110-10110/com. example.thadaninilesh.productapp 승/System.err : android.os.Looper.loop (Looper.java:135) 06-08 15 : 08 : 27.45 0 10110-10110/com.example.thadaninilesh.productapp W/System.err : android.app.ActivityThread.main (ActivityThread.java:5254) 06-08 15 : 08 : 27.450 10110-10110/com.example. thadaninilesh.productapp 승/System.err : java.lang.reflect.Method.invoke (기본 메서드) 06-08 15 : 08 : 27.450 10110-10110/com.example.thadaninilesh.productapp 승/System.err : at java.lang.reflect.Method.invoke (Method.java:372) 06-08 15 : 08 : 27.450 10110-10110/com.example.thadaninilesh.productapp 승/System.err : at com.android.internal.os .ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:903) 06-08 15 : 08 : 27.450 10110-10110/com.example.thadaninilesh.productapp W/System.err : com.android.internal.os.ZygoteInit. main (ZygoteInit.java:698) 06-08 15 : 08 : 27.480 10110-10394/com.example.thadaninilesh.productapp D/응답 : { "server_response": [{ "serial": "123456789QWERT", "complainType": "qwerty", "complainMessage": "신체가 완전히 손상되었습니다.", "added_on": "08-06-2016 "added", "productName": "Acer Travelmate"}, { "serial": "123456789QWERT", "complainType": "qwerty", "complainMessage": "신체가 완전히 손상되었습니다.", "08-06- 2016 ","productName ":"Acer Travelmate "}, {"serial ":"123456789QWERT ","complainType ":"qwerty ","complainMessage ":"신체가 완전히 손상되었습니다. ","added_on ":"08-06 "added", "productName": "Acer Travelmate"}, { "serial": "123456789QWERT", "complainType": "qwertyu", "complainMessage" 06-216 ","productName ":"Acer Travelmate "}, {"serial ":"123456789QWERT ","complainType ":"물리적 조건 ","complainMessage ":"- ","added_on ":"08-06 -2016 ","productName ":"Acer Travelmate "}, {"serial ":"12345678DFGBH ","complainType ":"sdcwsdw ","complainMessage ":"wdwdf ","added_on ":"08-06-2016 " , "productName": "Galaxy J7"}, { "serial": "12345678DFGBH", "complainType": "asd", "c" omplainMessage ":"- ","ADDED_ON ":"2016년 8월 6일 8시 6분 ","제품 이름 ":"갤럭시 J7 "}]} 당신은 당신의 데이터를 가져 오는 전에 viewComplainAdapter.notifyDataSetChanged();를 호출하고

답변

1

해결했습니다 ... 문제는 실행 순서였습니다. Asynctask를 호출 한 후 서버에서 json 문자열을 가져 오기 전에 listview를 채우는 것이 완료 될 때까지 기다리지 않았습니다. Asynctask의 onPostExecute 메소드에서 listview를 채워서 해결했습니다. 나를 도와 주신 분들께 감사드립니다.

0

.

당신은 당신의 데이터를 가져 오는 한 후 적어도 당신의 Fragment를 작성 후 전화 또는한다 : 코드 아래

while (count<jsonArray.length()){ 
    JSONObject JO = jsonArray.getJSONObject(count); 
    if(JO.getString("productName").isEmpty()){ 
     startActivity(new Intent(this.getActivity(), LoginActivity.class)); 
    } 
    productName = JO.getString("productName"); 
    serial = JO.getString("serial"); 
    complainType = JO.getString("complainType"); 
    complainMessage = JO.getString("complainMessage"); 
    added_on = JO.getString("added_on"); 
    Log.d("productName",productName); 
    ViewComplainsList viewComplainsList = new ViewComplainsList(complainMessage, complainType, productName, serial, added_on); 
    viewComplainAdapter.add(viewComplainsList); 
    count++; 
} 

viewComplainAdapter.notifyDataSetChanged(); // here 
+0

작동하지 않았습니다. –

0

확인합니다.

viewComplainAdapter = new ViewComplainAdapter (this.getActivity(), R.layout.complain_layout)); complainList.setAdapter (viewComplainAdapter); 여기 Activity 컨텍스트와 레이아웃 리소스를 사용하여 ViewComplainAdapter 클래스의 객체를 만들고 있으므로 전달할 데이터가 없습니다. 그래서 처음 fragmentation 인스턴스화, listview 어떤 데이터를 표시 할 수 없습니다.

그 후 서버로 요청을 보내고 있습니다. 아래 라인을 확인하십시오.

new BackgroundViewComplainTask(). execute();

서버에서 응답을 받으면 ViewComplainAdapter에 값을 추가합니다. 당신이 두 번째 조각을 호출 할 때

while (count<jsonArray.length()){ 
     JSONObject JO = jsonArray.getJSONObject(count); 

     productName = JO.getString("productName"); 
     serial = JO.getString("serial"); 
     complainType = JO.getString("complainType"); 
     complainMessage = JO.getString("complainMessage"); 
     added_on = JO.getString("added_on"); 
     Log.d("productName",productName); 
     ViewComplainsList viewComplainsList = new ViewComplainsList(complainMessage, complainType, productName, serial, added_on); 
     viewComplainAdapter.add(viewComplainsList); 
     count++; 
    } 

그래서, ViewComplainAdapter는 listviw에서 데이터를 표시 할 수 있습니다.

응답을받은 후에 어댑터를 listview로 설정하면 데이터 목록이있는 조각을 반드시 확인할 수 있습니다.

+0

동일한 문제가 발생했습니다.이 작업이 수행되지 않았습니다. –

+0

업데이트 된 코드를 게시 해주십시오. – Sarojini2064130

+0

코드를 업데이트했습니다 ... sharedPreferences에 내 json 데이터를 저장하고 가져 오는 중입니다.하지만 아무 것도 반환하지 않습니다. –

관련 문제