android - 使用AsyncTask在daimajia-AndroidImageSlider中加载两个以上的图片与jsonData

标签 android json android-asynctask

我正在使用 https://github.com/daimajia/AndroidImageSlider带有用于三张图片的 slider 。这是我在我的AsyncTask 中尝试从Json Data 加载三张图片的方法:

public class AsyncHttpTask extends AsyncTask<String, Void, Integer> {
        public ProgressDialog pDialog;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setIndeterminate(false);
            pDialog.setMessage("Loading, Please wait...");
            pDialog.setCancelable(true);
            pDialog.show();
        }

        @Override
        protected Integer doInBackground(String... params) {
            Integer result = 0;
            HttpURLConnection urlConnection;

            try {
                /* forming th java.net.URL object */
                URL url = new URL(params[0]);

                urlConnection = (HttpURLConnection) url.openConnection();

                /* for Get request */
                urlConnection.setRequestMethod("GET");

                int statusCode = urlConnection.getResponseCode();

                /* 200 represents HTTP OK */
                if (statusCode ==  200) {

                    BufferedReader r = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                    StringBuilder response = new StringBuilder();
                    String line;
                    while ((line = r.readLine()) != null) {
                        response.append(line);
                    }

                    parseResult(response.toString());

                    result = 1;

                }else{

                    result = 0; //"Failed to fetch data!";

                }

            } catch (Exception e) {
                Toast.makeText(MainActivity.this, e.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
            }

            return result; //"Failed to fetch data!";
        }

        @Override
        protected void onPostExecute(Integer result) {

            /* Download complete. Lets update UI */
            if (result == 1) {
                adapter = new MyRecyclerAdapter(MainActivity.this, feedItemList);
                mmRecyclerView.setAdapter(adapter);
                pDialog.dismiss();
            } else {
                Toast.makeText(MainActivity.this, "Failed to fetch data!", Toast.LENGTH_SHORT).show();

            }
        }
    }

当然,为了加载它,我们需要在 Oncreate 上使用它:

final String url = "http://url/Data.json"; //json data url
        new AsyncHttpTask().execute(url); //execute the json data

所以,我的 JsonData 中有三张图片:

"Main-header": [
    {

    "HeaderImg1": "http://url/Main1.jpg",
    "Title": "title 1"
    },
    {
    "HeaderImg2": "http://url/Main2.jpg",
    "Title": "title 2"
    },
    {
    "HeaderImg3": "http://url/Main2.jpg",
    "Title": "title 3"
    }
  ]

//我的 JsonData 没有任何问题。但是,

如上 JsonData 所示,如何在 slider 中显示这三个图像?

编辑:这是我在我的 Oncreate 上所做的,工作正常但我需要从 Json 加载数据:

mDemoSlider = (SliderLayout) findViewById(R.id.slider);
        HashMap<String, String> url_maps = new HashMap<>();
        url_maps.put("title1", "http://url/pic1.jpg");
        url_maps.put("title2", "http://url/pic3.jpg");
        url_maps.put("title3", "http://url/pic3.jpg");
        for (String name : url_maps.keySet()) {
            TextSliderView textSliderView = new TextSliderView(this);
            // initialize a SliderLayout
            textSliderView
                    .description(name)
                    .image(url_maps.get(name))
                    .setScaleType(BaseSliderView.ScaleType.Fit);
            //add your extra information
            textSliderView.bundle(new Bundle());
            textSliderView.getBundle()
                    .putString("extra", name);
            mDemoSlider.addSlider(textSliderView);
        }
        mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Accordion);
        mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Right_Bottom);
        mDemoSlider.setCustomAnimation(new DescriptionAnimation());
        mDemoSlider.setDuration(6000);

感谢任何帮助。

干杯!

最佳答案

这就是你应该做的。在 Asynctask 的 onPostExecute 方法中使用此代码。

                arraylist = new ArrayList<HashMap<String, String>>();
                JSONObject jsonResponse;
                try {
                    jsonResponse = new JSONObject(result);
                    JSONArray jsonMainNode = jsonResponse.optJSONArray("Main-header");

                    int lengthJsonArr = jsonMainNode.length();
                    for(int i=0; i < lengthJsonArr; i++)
                    {
                        HashMap<String, String> map = new HashMap<String, String>();
                        JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);


                        map.put(jsonChildNode.getString("Title"),jsonChildNode.getString("HeaderImg2"));
                        arraylist.add(map);
                        for(String name : map.keySet()){
                            TextSliderView textSliderView = new TextSliderView(MainActivity.this);

                            textSliderView
                                    .description(name)
                                    .image(map.get(name))
                                    .setScaleType(BaseSliderView.ScaleType.Fit)
                                    .setOnSliderClickListener(MainActivity.this);

                            textSliderView.bundle(new Bundle());
                            textSliderView.getBundle()
                                    .putString("extra", name);

                            mDemoSlider.addSlider(textSliderView);
                        }
                        mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Accordion);
                        mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
                        mDemoSlider.setCustomAnimation(new DescriptionAnimation());
                        mDemoSlider.setDuration(4000);
                        mDemoSlider.addOnPageChangeListener(MainActivity.this);
                    }


                } catch (JSONException e) {

                    e.printStackTrace();
                }


            }

关于android - 使用AsyncTask在daimajia-AndroidImageSlider中加载两个以上的图片与jsonData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30829945/

相关文章:

android - 具有 LBP 级联的 javaCV detectMultiScale 在物理设备上不起作用

android - 如何在Android App中创建用户手册?

android - 微调器模式下的 TimePickerDialog

javascript - 在 POST 上将 javascript 对象读取为 JSON

java - 如何从ListView中提取选定的项目?

android - 执行 HTTPS 请求时如何应对不受信任的证书异常?

node.js - 如何仅从一个键过滤对象并将其作为 json 返回?

java - 如何在 Java 中反序列化 JSON 对象数组

android - 在非 Activity 类的 AsyncTask 中 toast

java - AsyncTask 的 publishProgress 方法是异步的吗?