2016-04-01 1 views
0

私は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)  
+0

「URLがあり、画像がたくさんあります(Atleast 3000以上)」 - URL自体に画像はありません。 Webページにはイメージへの参照があり、URLはWebページを指している可能性があります。 "すべての画像はhrefのようです" - このURLは、HTTPクライアントから要求されたときに、画像への参照を含むHTMLページを返しますか? – CommonsWare

+0

はい、そうです。 – Umair

答えて

0

ステップ1:an HTML parsing libraryを選択します。

ステップ2:プロジェクトにライブラリを追加します。

手順3:そのライブラリの指示に従って、そのURLに関連付けられたHTMLを解析し、画像のURLを抽出します。

バックグラウンドスレッドでこの作業を行ってください。 URLリストを取得したら、RecyclerViewにピカソを使用して、必要に応じて画像を取得できます。

+0

申し訳ありませんが、私は試してみましょう。 – Umair

0

JSoupを簡単に使用できます。

File input = new File("/tmp/input.html"); 
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/"); 
Element content = doc.getElementById("content"); 
Elements links = content.getElementsByTag("a"); 
for (Element link : links) { 
String linkHref = link.attr("href"); 
String linkText = link.text(); 
}