2014-10-01 9 views
0

this 샘플 코드를 사용하여 HorizontalScrollView를 구현하려고합니다. 서버에서 데이터를 가져와야하므로 내 요구 사항에 따라 변경했습니다. 그러나 데이터도 오류도없고 빈 활동도 없습니다. 나는 무엇이 빠졌는지 모른다. 여기, 서버에서 데이터를 얻을 아래 로그 캣 결과를 볼 수 있어요HorizontalScrollView 서버에서 데이터를 가져 오는 중

내 전체 코드입니다 :

MainActivity.java

public class MainActivity extends Activity { 

    CenterLockHorizontalScrollview centerLockHorizontalScrollview; 
    ArrayList<Actors> actorsList; 
    ActorAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     actorsList = new ArrayList<Actors>(); 
     new JSONAsyncTask().execute("http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors"); 

     centerLockHorizontalScrollview = (CenterLockHorizontalScrollview) findViewById(R.id.scrollView);   
     adapter = new ActorAdapter(getApplicationContext(), R.layout.row, actorsList);  
     centerLockHorizontalScrollview.setAdapter(MainActivity.this, adapter);   
    } 


    class JSONAsyncTask extends AsyncTask<String, Void, Boolean> { 

     ProgressDialog dialog; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      dialog = new ProgressDialog(MainActivity.this); 
      dialog.setMessage("Loading, please wait"); 
      dialog.setTitle("Connecting server"); 
      dialog.show(); 
      dialog.setCancelable(false); 
     } 

     @Override 
     protected Boolean doInBackground(String... urls) { 
      try { 

       //------------------>> 
       HttpGet httppost = new HttpGet(urls[0]); 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpResponse response = httpclient.execute(httppost); 

       // StatusLine stat = response.getStatusLine(); 
       int status = response.getStatusLine().getStatusCode(); 

       if (status == 200) { 
        HttpEntity entity = response.getEntity(); 
        String data = EntityUtils.toString(entity); 


        JSONObject jsono = new JSONObject(data); 
        JSONArray jarray = jsono.getJSONArray("actors"); 

        for (int i = 0; i < jarray.length(); i++) { 
         JSONObject object = jarray.getJSONObject(i); 

         Actors actor = new Actors(); 

         actor.setName(object.getString("name")); 
         Log.d("Name:", object.getString("name")); 
         actor.setImage(object.getString("image")); 
         Log.d("Image:", object.getString("image")); 

         actorsList.add(actor); 
        } 
        return true; 
       } 

       //------------------>> 

      } catch (ParseException e1) { 
       e1.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return false; 
     } 

     protected void onPostExecute(Boolean result) { 
      dialog.cancel(); 
      adapter.notifyDataSetChanged(); 
      if(result == false) 
       Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show(); 

     } 
    } 

} 

로그 캣

10-01 07:28:12.380: I/Process(582): Sending signal. PID: 582 SIG: 9 
10-01 07:29:11.280: D/gralloc_goldfish(636): Emulator without GPU emulation detected. 
10-01 07:29:12.979: D/Name:(636): Brad Pitt 
10-01 07:29:12.979: D/Image:(636): http://microblogging.wingnity.com/JSONParsingTutorial/brad.jpg 
10-01 07:29:12.979: D/Name:(636): Tom Cruise 
10-01 07:29:12.979: D/Image:(636): http://microblogging.wingnity.com/JSONParsingTutorial/cruise.jpg 
10-01 07:29:12.979: D/Name:(636): Johnny Depp 
10-01 07:29:13.009: D/Image:(636): http://microblogging.wingnity.com/JSONParsingTutorial/johnny.jpg 
10-01 07:29:13.009: D/Name:(636): Angelina Jolie 
10-01 07:29:13.019: D/Image:(636): http://microblogging.wingnity.com/JSONParsingTutorial/jolie.jpg 
10-01 07:29:13.019: D/Name:(636): Tom Hanks 
10-01 07:29:13.019: D/Image:(636): http://microblogging.wingnity.com/JSONParsingTutorial/tom.jpg 
10-01 07:29:13.019: D/Name:(636): Will Smith 
10-01 07:29:13.019: D/Image:(636): http://microblogging.wingnity.com/JSONParsingTutorial/will.jpg 
+0

먼저 확인하면 서버에서 모든 데이터를 받고에서해야 하는가? – Piyush

+0

그리고'onPostExecute()'메소드에서'UI'를 업데이트해야합니다. 'onPostExecute()'메소드에서 어댑터를 설정한다. – Piyush

답변

1

어댑터를 에 설정하면 생성됩니다. 방법은 작업이 아직 완료되지 않았 음을 의미합니다. 그것은 onPostExecute 방법

 protected void onPostExecute(Boolean result) { 
     dialog.cancel();   
     if(result == false) 
      Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show(); 
     if(actorsList != null) { 
      adapter = new ActorAdapter(getApplicationContext(), R.layout.row, actorsList);  
      centerLockHorizontalScrollview.setAdapter(MainActivity.this, adapter); 
     } 
     adapter.notifyDataSetChanged(); 
    } 
} 
+0

아니요, 같은 코드를 사용하여 listview, gridview 등에 데이터를 표시하는 것과 같은 방식으로 사용할 수 없습니다. – Sophie

+0

이것을 사용해 보셨습니까? – santalu

+0

대단히 고마워요 :) – Sophie