Horizo​​ntalScrollView从获取服务器数据 [英] HorizontalScrollView fetching data from server

查看:300
本文介绍了Horizo​​ntalScrollView从获取服务器数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用样本code来实现Horizo​​ntalScrollView。我有来从服务器上的数据,所以我所做的更改按我的要求,但是我既不获取数据,也没有任何错误,只是空白的活动。我不知道是什么缺少的。

我能够从服务器获取数据,请参见下面的logcat的结果,这里是我的完整code:

MainActivity.java

 公共类MainActivity延伸活动{    CenterLockHorizo​​ntalScrollview centerLockHorizo​​ntalScrollview;
    ArrayList的<&演员GT; actorsList;
    ActorAdapter适配器;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
        actorsList =新的ArrayList<&演员GT;();
        新JSONAsyncTask()执行(http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors);        centerLockHorizo​​ntalScrollview =(CenterLockHorizo​​ntalScrollview)findViewById(R.id.scrollView);
        适配器=新ActorAdapter(getApplicationContext(),R.layout.row,actorsList);
        centerLockHorizo​​ntalScrollview.setAdapter(MainActivity.this,适配器);
    }
    类JSONAsyncTask扩展的AsyncTask<弦乐,太虚,布尔> {        ProgressDialog对话框;        @覆盖
        在preExecute保护无效(){
            super.on preExecute();
            对话框=新ProgressDialog(MainActivity.this);
            dialog.setMessage(加载中,请稍候);
            dialog.setTitle(连接服务器);
            dialog.show();
            dialog.setCancelable(假);
        }        @覆盖
        保护布尔doInBackground(字符串的URL ...){
            尝试{                // ------------------>>
                HTTPGET httppost =新HTTPGET(网址[0]);
                HttpClient的HttpClient的=新DefaultHttpClient();
                HTT presponse响应= httpclient.execute(httppost);                //状态行STAT = response.getStatusLine();
                。INT状态= response.getStatusLine()的getStatus code();                如果(状态== 200){
                    HttpEntity实体= response.getEntity();
                    字符串数据= EntityUtils.toString(实体);
                    JSONObject的jsono =新的JSONObject(数据);
                    JSONArray jarray = jsono.getJSONArray(演员);                    的for(int i = 0; I< jarray.length();我++){
                        的JSONObject对象= jarray.getJSONObject(I)                        演员演员=新演员();                        actor.setName(object.getString(名字));
                        Log.d(姓名:object.getString(名字));
                        actor.setImage(object.getString(图像));
                        Log.d(图像,object.getString(图像));                        actorsList.add(演员);
                    }
                    返回true;
                }                // ------------------>>            }赶上(ParseException的E1){
                e1.printStackTrace();
            }赶上(IOException异常五){
                e.printStackTrace();
            }赶上(JSONException E){
                e.printStackTrace();
            }
            返回false;
        }        保护无效onPostExecute(布尔结果){
            dialog.cancel();
            adapter.notifyDataSetChanged();
            如果(结果==假)
                Toast.makeText(getApplicationContext(),无法读取从服务器上的数据,Toast.LENGTH_LONG).show();        }
    }}

的logcat

  7月10日至1日:28:12.380:I /流程(582):发送信号。 PID:582 SIG:9
七月10日至1日:29:11.280:D / gralloc_goldfish(636):无仿真模拟GPU检测。
七月10日至1日:29:12.979:D /名称:(636):布拉德·皮特
七月10日至1日:29:12.979:D /图片:(636):http://microblogging.wingnity.com/JSONParsingTutorial/brad.jpg
七月10日至1日:29:12.979:D /名称:(636):汤姆·克鲁斯
七月10日至1日:29:12.979:D /图片:(636):http://microblogging.wingnity.com/JSONParsingTutorial/cruise.jpg
七月10日至1日:29:12.979:D /名称:(636):约翰尼·德普
七月10日至1日:29:13.009:D /图片:(636):http://microblogging.wingnity.com/JSONParsingTutorial/johnny.jpg
七月10日至1日:29:13.009:D /名称:(636):安吉丽娜·朱莉
七月10日至1日:29:13.019:D /图片:(636):http://microblogging.wingnity.com/JSONParsingTutorial/jolie.jpg
七月10日至1日:29:13.019:D /名称:(636):汤姆·汉克斯
七月10日至1日:29:13.019:D /图片:(636):http://microblogging.wingnity.com/JSONParsingTutorial/tom.jpg
七月10日至1日:29:13.019:D /名称:(636):威尔·史密斯
七月10日至1日:29:13.019:D /图片:(636):http://microblogging.wingnity.com/JSONParsingTutorial/will.jpg


在解决方案

您要设置适配器的onCreate 方式我的意思是,当任务尚未完成。它应该在 onPostExecute 方式

 保护无效onPostExecute(布尔结果){
        dialog.cancel();
        如果(结果==假)
            Toast.makeText(getApplicationContext(),无法读取从服务器上的数据,Toast.LENGTH_LONG).show();
        如果(actorsList!= NULL){
            适配器=新ActorAdapter(getApplicationContext(),R.layout.row,actorsList);
            centerLockHorizo​​ntalScrollview.setAdapter(MainActivity.this,适配器);
        }
        adapter.notifyDataSetChanged();
    }
}

I am trying to implement HorizontalScrollView using this sample code. I have to fetch data from server, so I have made changes as per my requirement, however I am neither getting data nor any error, just blank activity. I don't know what missing.

I am able to get data from server, see logcat result below and here is my complete code:

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

解决方案

You are setting adapter in onCreate method i mean when task hasn't yet completed. it should be in onPostExecute method

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

这篇关于Horizo​​ntalScrollView从获取服务器数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆