首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何以编程方式在Android中搜索图像?

如何以编程方式在Android中搜索图像?
EN

Stack Overflow用户
提问于 2018-02-14 18:18:21
回答 2查看 6.3K关注 0票数 1

我的Activity.First文本中有一些title,第二个是author.Now,第二个是author.Now,用户从第二个编辑文本ie author.I获得与该内容相关的图像(标题和作者).So,我连接title and author name并让HTTP request using Volley.And打印response.But响应是如此不可预测,以至于我无法从中获取图像。

代码语言:javascript
运行
复制
try {
        String googleImageUrl = "http://images.google.com/images?q=";
        String query = URLEncoder.encode(title + " " + author, "utf-8");
        String url = googleImageUrl + query;
        Toast.makeText(context, url, Toast.LENGTH_SHORT).show();
        // Instantiate the RequestQueue.
        RequestQueue queue = Volley.newRequestQueue(this);

  // Request a string response from the provided URL.
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        post_des.setText("Response is: " + response);
                        Log.i("Show me something awesome dude", response);
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                post_des.setText("That didn't work!");
            }
        });
 // Add the request to the RequestQueue.
        queue.add(stringRequest);

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

反应是这样的:

代码语言:javascript
运行
复制
Response is: <!doctype html><html itemscope="" itemtype="http://schema.org/SearchResultsPage" lang="en-IN"><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><link href="/images/branding/product/ico/googleg_lodp.ico" rel="shortcut icon"><title>something something - Google Search</title><style>#gb{font:13px/27px Arial,sans-serif;height:30px}#gbz,#gbg{position:absolute;white-space:nowrap;top:0;height:30px;z-index:1000}#gbz{left:0;padding-left:4px}#gbg{right:0;padding-right:5px}#gbs{background:transparent;position:absolute;top:-999px;visibility:hidden;z-index:998;right:0}.gbto #gbs{background:#fff}#gbx3,#gbx4{background-color:#2d2d2d;background-image:none;_background-image:none;background-position:0 -138px;background-repeat:repeat-x;border-bottom:1px solid #000;font-size:24px;height:29px;_height:30px;opacity:1;filter:alpha(opacity=100);position:absolute;top:0;width:100%;z-index:990}#gbx3{left:0}#gbx4{right:0}#gbb{position:relative}#gbbw{left:0;position:absolute;top:30px;width:100%}.gbtcb{position:absolute;visibility:hidden}#gbz .gbtcb{right:0}#gbg .gbtcb{left:0}.gbxx{display:none........like wise

我本来想要一个Html文档的。那么,如何用内容(标题和作者)对图像发出HTTP请求。

用外行人语言编辑

假设我在images.google.com上,我在搜索栏中输入了一些内容,然后进行了搜索,现在我希望Google返回的数据是Url of the images on that webpage(我在后端完成所有这些操作,而不是向用户显示)。我认为现在可以理解:)

EN

Stack Overflow用户

回答已采纳

发布于 2018-02-17 21:00:46

你得到了html,但是整个搜索页面。您可以使用css选择器和JSOUP库检索图片的urls (易于使用)。只需转到Chrome浏览器,然后选择Settings -更多的工具-开发工具。然后单击图片上的鼠标右键,然后选择inspect,您将看到哪个容器是图片的容器,什么div包含图像的src url,然后右击这个div并选择copy css selector。那就跟图书馆合作吧。

但是要注意,如果它们更改了页面html,您的代码就会发出声音,这是不实际的。您最好为此目的使用特定的api,如上面的注释中所建议的Google自定义搜索API。

要将图像放入用户界面,需要获取其url地址,然后可以使用GlidePicasso,甚至是Volley

代码语言:javascript
运行
复制
// Retrieves an image with Volley specified by the URL, displays it in the UI.
ImageRequest request = new ImageRequest(url,
    new Response.Listener<Bitmap>() {
        @Override
        public void onResponse(Bitmap bitmap) {
            mImageView.setImageBitmap(bitmap);
        }
    }, 0, 0, null,
    new Response.ErrorListener() {
        public void onErrorResponse(VolleyError error) {
            mImageView.setImageResource(R.drawable.image_load_error);
        }
    });

编辑:

以下是谷歌搜索页面img.rg_ic上所有图片的CSS选择器。使用Jsoup和这个选择器,您可以访问页面上的所有图像标记

Jsoup示例:

代码语言:javascript
运行
复制
Document doc = Jsoup.connect(your link string).get();
Elements imgs = doc.select("img");//the selector
for (Element img : imgs) {
  //add img urls to String array and then use to get imgs with them
  String s = img.attr("src");
  arr.add(s);
}

EDIT2 :

您的更改代码:

代码语言:javascript
运行
复制
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {


TextView textView;
String googleImageUrl = "https://www.google.co.in/search?biw=1366&bih=675&tbm=isch&sa=1&ei=qFSJWsuTNc-wzwKFrZHoCw&q=";
ArrayList<String> urls = new ArrayList<>();
String url;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    AsyncTask.execute(new Runnable() {
        @Override
        public void run() {
            Log.i("someething" , "something");
            getImages("https://www.google.co.in/search?biw=1366&bih=675&tbm=isch&sa=1&ei=qFSJWsuTNc-wzwKFrZHoCw&q=somethingsomething");
        }
    });
}

private void getImages(String url) {
    Document doc = null;
    try{
        doc = Jsoup.connect(url).get();
    }catch (IOException e){
        e.printStackTrace();
    }
    Elements imgs = doc.select("img");
    System.out.println("Damn images"+imgs);
    for (Element img : imgs){
        Log.d("image-src", img.attr("data-src"));//changed `src` to `data-src`
    }

}

}

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48793779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档