首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从服务器获取数据的HorizontalScrollView

从服务器获取数据的HorizontalScrollView
EN

Stack Overflow用户
提问于 2014-10-01 06:57:22
回答 1查看 238关注 0票数 0

我正在尝试使用HorizontalScrollView示例代码实现。我必须从服务器获取数据,因此我已经根据我的要求进行了更改,但是我既没有得到数据,也没有任何错误,只是空白活动。我不知道错过了什么。

我能够从服务器获取数据,请参阅下面的logcat结果,下面是我的完整代码:

MainActivity.java

代码语言:javascript
复制
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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-01 07:06:30

您正在onCreate方法中设置适配器,我的意思是当任务尚未完成时。应该在onPostExecute方法中。

代码语言:javascript
复制
       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();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26135739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档