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