2014-10-01 142 views
0

我想用this示例代碼實現Horizo​​ntalScrollView。我必須從服務器獲取數據,所以我按照我的要求進行了更改,但是我既沒有收到數據也沒有發生任何錯誤,只是空白的活動。我不知道錯過了什麼。Horizo​​ntalScrollView從服務器獲取數據

我能夠從服務器獲取數據,請參見下面的logcat結果,這裏是我的完整代碼:

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(); 

     } 
    } 

} 

logcat的

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 2014-10-01 07:05:48

+0

你必須在'onPostExecute()'方法中更新你的'UI'。意思是在'onPostExecute()'方法中設置你的適配器。 – Piyush 2014-10-01 07:17:14

回答

1

您正在設置適配器onCreate方法我的意思是什麼時候任務尚未完成。它應該是在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

不,這是不可能的,因爲我使用相同的代碼,相同的方式顯示數據到列表視圖,gridview等。 – Sophie 2014-10-01 07:29:51

+0

你試過嗎? – santalu 2014-10-01 07:32:15

+0

非常感謝你的傢伙:) – Sophie 2014-10-01 07:38:46