如何动态地将图像从URL的字符串数组添加到活动的scrollview线性布局

西里亚克·多米尼·桑达西尔

我有一个字符串资源,其URL指向一堆jpg格式的图像,作为string.xml中的字符串数组资源。我正在尝试将这些图像动态添加到活动中。我首先尝试仅将链接的textview添加到活动上,并且此方法有效。但是,当我尝试实际添加图像时,它给了我一个android.os.NetworkOnMainThreadException。为了解决这个问题,我添加了一个异步任务,但是仍然无法正常工作。请告诉我我做错了。我对Android编程非常陌生,所以如果这是一个愚蠢的问题,请原谅我。这是到目前为止我拥有的代码:

package com.example.testgallery;

import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.io.InputStream;
import java.net.URL;
import java.util.Arrays;
import java.util.List;

public class Gallery extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);
        List<String> pictures = Arrays.asList(getResources().getStringArray(R.array.gallery_2014));
        LinearLayout piclayout = (LinearLayout) findViewById(R.id.gallery_preview_scroll_layout);
        for(int x=0;x<pictures.size();x++) {
            String url = pictures.get(x);
            TextView urlview = new TextView(this);
            urlview.setText(url);
            piclayout.addView(urlview);
            try {
                new getPictures().execute(url);
            } catch (Exception e) {
                Log.d("Picture Error",e.toString());
            }
        }
    }

    public void addImage(InputStream is){
        Drawable d = Drawable.createFromStream(is, "Picture");
        ImageView image = new ImageView(Gallery.this);
        image.setImageDrawable(d);
        LinearLayout piclayout = (LinearLayout) findViewById(R.id.gallery_preview_scroll_layout);
        piclayout.addView(image);
    }

    class getPictures extends AsyncTask<String, Void, InputStream> {

        private Exception exception;

        protected InputStream doInBackground(String... urls) {
            InputStream is = null;
            for(String url : urls) {
                try {
                    is = (InputStream) new URL(url).getContent();
                } catch (Exception e) {
                    Log.d("Picture Error", e.toString());
                }
            }
            return is;
        }

        protected void onPostExecute(InputStream is) {
            addImage(is);
        }
    }

}
西里亚克·多米尼·桑达西尔

我一直在努力,并提出了一个快速的解决方案。这可能不是最好的解决方案,但它可以工作:

package com.example.testgallety

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Arrays;
import java.util.List;

public class Gallery extends AppCompatActivity {

    List<String> urls;
    Bitmap bmImg = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);
        urls = Arrays.asList(getResources().getStringArray(R.array.gallery_2014));
        for(int i=0;i<urls.size();i++){
            String url;
            url = urls.get(i);
            new getPictures().execute(url);
        }
    }

    public void addImage(InputStream is){

    }

    class getPictures extends AsyncTask<String, String, String> {

        private Exception exception;

        @Override
        protected void onPreExecute(){
            super.onPreExecute();
        }

        protected String doInBackground(String... args) {
            InputStream is = null;
            URL uri;
            String url = args[0];
            try {
                uri = new URL(url);
                HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
                conn.setDoInput(true);
                conn.connect();
                is = conn.getInputStream();
                bmImg=BitmapFactory.decodeStream(is);
            } catch (Exception e) {
                Log.d("Picture Error", e.toString());
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            super .onPostExecute(result);
            ImageView image;
            LinearLayout piclayout = (LinearLayout) findViewById(R.id.gallery_preview_scroll_layout);
            image = new ImageView(Gallery.this);
            image.setImageBitmap(bmImg);
            piclayout.addView(image);
        }
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何动态地将图像添加到imageView

来自分类Dev

动态地将丢失的标签添加到损坏的HTML字符串中

来自分类Dev

动态地将视图添加到布局

来自分类Dev

如何动态地在滚动视图中将自定义布局添加到线性布局

来自分类Dev

如何动态地将 LinearLayoutCompat 视图添加到现有的 xml 布局?

来自分类Dev

如何动态地将按钮添加到视图以便布局宽度正常工作?

来自分类Dev

如何动态地将新数组添加到现有数组中

来自分类Dev

如何动态地将Image添加到ImageView?

来自分类Dev

如何使用jquery动态地将元素添加到SVG图像?

来自分类Dev

动态地将xml布局添加到我当前的Activity布局中

来自分类Dev

C#如何最好地将字符串数组的元素添加到通用列表

来自分类Dev

C#如何最好地将字符串数组的元素添加到通用列表

来自分类Dev

动态地将EditText与(如果可能)具有字符串ID的片段一起添加到片段中

来自分类Dev

如何将动态数据(如字符串数组)添加到微调器

来自分类Dev

如何使用C将字符串动态地放入数组

来自分类Dev

如何将字符串添加到数组?

来自分类Dev

如何将字符串添加到数组?

来自分类Dev

如何使用codeigniter中的会话动态地将新数组添加到现有数组中

来自分类Dev

如何动态地将ImageButtons和OnClick侦听器添加到300多个图像中?

来自分类Dev

动态地将超链接添加到gridview

来自分类Dev

动态地将数据添加到QTableView

来自分类Dev

动态地将标签添加到JTabbedPane

来自分类Dev

动态地将属性添加到类

来自分类Dev

动态地将内容添加到标签页

来自分类Dev

动态地将元素添加到HTML页面

来自分类Dev

动态地将视图添加到RecyclerView

来自分类Dev

动态地将新属性添加到Node中的现有JSON数组

来自分类Dev

如何动态地将QScrollArea添加到StackedWidget页面并向其中添加小部件?

来自分类Dev

如何动态地将字符串文本追加到闪亮的应用程序主体上?

Related 相关文章

  1. 1

    如何动态地将图像添加到imageView

  2. 2

    动态地将丢失的标签添加到损坏的HTML字符串中

  3. 3

    动态地将视图添加到布局

  4. 4

    如何动态地在滚动视图中将自定义布局添加到线性布局

  5. 5

    如何动态地将 LinearLayoutCompat 视图添加到现有的 xml 布局?

  6. 6

    如何动态地将按钮添加到视图以便布局宽度正常工作?

  7. 7

    如何动态地将新数组添加到现有数组中

  8. 8

    如何动态地将Image添加到ImageView?

  9. 9

    如何使用jquery动态地将元素添加到SVG图像?

  10. 10

    动态地将xml布局添加到我当前的Activity布局中

  11. 11

    C#如何最好地将字符串数组的元素添加到通用列表

  12. 12

    C#如何最好地将字符串数组的元素添加到通用列表

  13. 13

    动态地将EditText与(如果可能)具有字符串ID的片段一起添加到片段中

  14. 14

    如何将动态数据(如字符串数组)添加到微调器

  15. 15

    如何使用C将字符串动态地放入数组

  16. 16

    如何将字符串添加到数组?

  17. 17

    如何将字符串添加到数组?

  18. 18

    如何使用codeigniter中的会话动态地将新数组添加到现有数组中

  19. 19

    如何动态地将ImageButtons和OnClick侦听器添加到300多个图像中?

  20. 20

    动态地将超链接添加到gridview

  21. 21

    动态地将数据添加到QTableView

  22. 22

    动态地将标签添加到JTabbedPane

  23. 23

    动态地将属性添加到类

  24. 24

    动态地将内容添加到标签页

  25. 25

    动态地将元素添加到HTML页面

  26. 26

    动态地将视图添加到RecyclerView

  27. 27

    动态地将新属性添加到Node中的现有JSON数组

  28. 28

    如何动态地将QScrollArea添加到StackedWidget页面并向其中添加小部件?

  29. 29

    如何动态地将字符串文本追加到闪亮的应用程序主体上?

热门标签

归档