2016-03-22 4 views
0

jpg形式の画像の束にURLを指定した文字列リソースがstring.xmlの文字列配列リソースとしてあります。これらの画像を動的にアクティビティに追加しようとしています。私はまずアクティビティにリンクのテキストビューを追加するだけで、これがうまくいった。しかし、実際に画像を追加しようとすると、アンドロイド.os.NetworkOnMainThreadExceptionが返されました。これを修正するために、非同期タスクを追加しましたが、これはまだ動作しませんでした。私が間違っていることを教えてください。私はAndroidプログラミングにとって非常に新しいので、これが愚かな質問であれば私を許してください。これは私がこれまでに持っていたコードです:URLの文字列配列からアクティビティのスクロールビュー線形レイアウトに画像を動的に追加する方法

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

} 

答えて

0

私は試し続けていて、すばやい解決策を考え出しました。これは最善の解決策ではないかもしれませんが、うまくいきます:

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

} 
関連する問題