2016-03-22 5 views
0

Ich habe eine String-Ressource mit URLs zu einer Reihe von Bildern im jpg-Format als String-Array-Ressource in string.xml. Ich versuche, diese Bilder dynamisch zur Aktivität hinzuzufügen. Ich habe zuerst versucht, nur Textansichten der Links zu der Aktivität hinzuzufügen, und das hat funktioniert. Aber wenn ich versuche, die Bilder hinzuzufügen, gab es mir eine android.os.NetworkOnMainThreadException. Um dies zu beheben, habe ich eine Async-Aufgabe hinzugefügt, die jedoch immer noch nicht funktioniert hat. Bitte sag mir, was ich falsch mache. Ich bin sehr neu in der Android-Programmierung, also bitte vergib mir, wenn das eine dumme Frage ist. Dies ist der Code, den ich bisher für diese:So fügen Sie Bilder aus einem String-Array von URLs dem dynamischen Scrollview-Layout einer Aktivität dynamisch hinzu

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

} 

Antwort

0

habe ich versucht und kam mit einer schnellen Lösung. Dies ist möglicherweise nicht die beste Lösung, aber es funktioniert:

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

}