私はURLを持っており、少なくとも3000以上の画像がたくさんある。すべての画像はhrefのようです。画像のタイトルをクリックすると、画像が開きます。私が望むのは、私のプロジェクトでこれらのイメージを使用することです。私はPicasso RecyclerViewとAsyncクラスを使って簡単にできます。私はこのためにWebサービスを持っています。私たちがURLだけを知り、アンドロイドのウェブサービスに関する情報を持たない場合、複数の画像を取り出す(可能であればループを使用する)
現在のところ、私が持っているURLだけでは、画像を取得してループや次の画像を収集する方法を知りません。 hrefをクリックしてstring.xmlやいくつかの配列をコピーすることで、配列内のすべてのURLを貼り付けてコピーすることができますが、100のイメージがあり、このようにする価値がないためにしたくありません。
私たちがJSONやXMLを持っていないと、どのようにしてURLから画像を取得することができるのでしょうか?
EDITED
これは
Context context;
private IAsyncTaskListener listener;
ProgressBar progressBar;
public ArrayList<String> linkArray = new ArrayList<>();
public HTMLAsync(Context context, IAsyncTaskListener listener, ProgressBar progressBar) {
this.context = context;
this.listener = listener;
// dataArray.clear();
this.progressBar = progressBar;
}
@Override
protected void onPreExecute(){
progressBar.setVisibility(View.VISIBLE);
}
@Override
protected Boolean doInBackground(String... params) {
File input = new File("/tmp/input.html");
Document doc = null;
try {
doc = Jsoup.parse(input, "UTF-8", "http://mobileswall.com/wp-content/uploads/2013/09/");
Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
for (Element link : links) {
String linkHref = link.attr("href");
linkArray.add(linkHref);
String linkText = link.text();
}} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
if (result==true) {
progressBar.setVisibility(View.VISIBLE);
this.listener.onCompleted(linkArray);
} else
Toast.makeText(context,"Check your Internet Connection",Toast.LENGTH_LONG).show();
}
public interface IAsyncTaskListener {
void onCompleted(List<String> linkArray);
}
}
私の非同期クラスであり、これは私が
private LayoutInflater inflater;
Context context;
List<String> linkArray;
private int lastPosition = -1;
public RecyclerViewAdapter(Context context) {
//this.dataArray = dataArray;
this.context = context;
inflater = LayoutInflater.from(context);
}
public void setDataArray(List<String> linkArray) {
this.linkArray = linkArray;
}
@Override
public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.cardview, parent, false);
CustomViewHolder holder = new CustomViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(CustomViewHolder holder, int position) {
Picasso.with(context).load(linkArray.get(position)).into(holder.image);
}
@Override
public int getItemCount() {
return linkArray.size();
}
public class CustomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView image;
public CustomViewHolder(View itemView) {
super(itemView);
image = (ImageView) itemView.findViewById(R.id.imageView);
}
@Override
public void onClick(View v) {
}
}
}
メインActivityクラスを使用しています私のアダプタクラスでは、次のとおりです。
RecyclerView recyclerView;
RecyclerViewAdapter recyclerViewAdapter;
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new HTMLAsync(getApplicationContext(), this, progressBar).execute();
}
@Override
public void onCompleted(List<String> linkArray) {
// Initializing the Recycler View and its layout
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
recyclerViewAdapter = new RecyclerViewAdapter(MainActivity.this);
recyclerViewAdapter.setDataArray(linkArray);
recyclerView.setAdapter(recyclerViewAdapter);
recyclerView.setHasFixedSize(true);
recyclerViewAdapter.notifyDataSetChanged();
}
}
私はPicasooとJSoupライブラリ、およびrecyclerviewとcardviewサポートライブラリをgradleファイルにも含めました。
これは私がこれを実行しようとしたときに生成されたLOGCATであり、本当に何が原因なのかわかりません。
E/lowmemorykiller: Kernel does not support memory pressure events or in- kernel low memory killer
04-02 02:05:46.746 963-963/? E/CameraService: setUpVendorTags: Vendor tag operations not fully defined. Ignoring definitions.
04-02 02:05:46.856 1019-1019/? E/perfprofd: unable to open configuration file /data/data/com.google.android.gms/files/perfprofd.conf
04-02 02:05:46.995 952-952/? E/SurfaceFlinger: hwcomposer module not found
04-02 02:05:47.640 952-977/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
04-02 02:05:51.636 966-966/? E/memtrack: Couldn't load memtrack module (No such file or directory)
04-02 02:05:51.636 966-966/? E/android.os.Debug: failed to load memtrack module: -2
04-02 02:05:51.820 963-963/? E/audio_hw_generic: Error opening input stream format 1, channel_mask 0010, sample_rate 16000
04-02 02:05:51.820 963-1284/? E/AudioFlinger: no wake lock to update!
04-02 02:05:51.821 963-963/? E/AudioFlinger: int android::load_audio_interface(const char*, audio_hw_device_t**) couldn't load audio hw module audio.r_submix (No such file or directory)
04-02 02:05:51.821 963-963/? E/SoundTriggerHwService: couldn't load sound trigger module sound_trigger.primary (No such file or directory)
04-02 02:05:51.822 963-963/? E/RadioService: couldn't load radio module radio.primary (No such file or directory)
04-02 02:05:51.858 959-959/? E/Netd: cannot find interface dummy0
04-02 02:05:52.606 966-966/? E/Minikin: addFont failed to create font /system/fonts/NanumGothic.ttf
04-02 02:05:52.606 966-966/? E/Minikin: addFont failed to create font /system/fonts/DroidSansFallback.ttf
04-02 02:05:52.606 966-966/? E/Minikin: addFont failed to create font /system/fonts/MTLmr3m.ttf
04-02 02:05:53.188 966-966/? E/EmojiFactory_jni: Failed to load libemoji.so: dlopen failed: library "libemoji.so" not found
04-02 02:05:54.443 966-966/? E/Hyphenator: error loading hyphenation /system/usr/hyphen-data/hyph-en-us.pat.txt
java.io.FileNotFoundException: /system/usr/hyphen-data/hyph-en-us.pat.txt: open failed: ENOENT (No such file or directory)
at libcore.io.IoBridge.open(IoBridge.java:452)
at libcore.io.IoUtils$FileReader.<init>(IoUtils.java:207)
at libcore.io.IoUtils.readFileAsString(IoUtils.java:114)
at android.text.Hyphenator.loadHyphenator(Hyphenator.java:96)
at android.text.Hyphenator.init(Hyphenator.java:154)
at com.android.internal.os.ZygoteInit.preloadTextResources(ZygoteInit.java:207)
at com.android.internal.os.ZygoteInit.preload(ZygoteInit.java:186)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
at libcore.io.IoBridge.open(IoBridge.java:438)
at libcore.io.IoUtils$FileReader.<init>(IoUtils.java:207)
at libcore.io.IoUtils.readFileAsString(IoUtils.java:114)
at android.text.Hyphenator.loadHyphenator(Hyphenator.java:96)
at android.text.Hyphenator.init(Hyphenator.java:154)
at com.android.internal.os.ZygoteInit.preloadTextResources(ZygoteInit.java:207)
at com.android.internal.os.ZygoteInit.preload(ZygoteInit.java:186)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
「URLがあり、画像がたくさんあります(Atleast 3000以上)」 - URL自体に画像はありません。 Webページにはイメージへの参照があり、URLはWebページを指している可能性があります。 "すべての画像はhrefのようです" - このURLは、HTTPクライアントから要求されたときに、画像への参照を含むHTMLページを返しますか? – CommonsWare
はい、そうです。 – Umair