【问题标题】:Android: How to fetch or get specific image from any URl or LINK as like facebook?Android:如何从任何 URL 或 LINK 获取或获取特定图像,如 facebook?
【发布时间】:2015-12-25 04:35:39
【问题描述】:

我必须像 facebook 一样使用来自任何 url 的图像。但我无法理解它在 android 中的可能性。以及如何在我的应用程序中迁移。我展示了一个 iOS 问题和答案,它使用 facebook graph api 从 url 获取信息,请参阅this facebook graph API 链接,所以请帮助我解决这个问题。

见下图,我想在 android 中这样

【问题讨论】:

  • 要在哪里显示图片
  • 在带有图像和文本的自定义列表视图中
  • 使用毕加索库。这是链接square.github.io/picasso。这将显示来自 url 的图像并自行处理错误。
  • @SameerDonga picaso 库仅用于链接基础图像而不是从任何链接获取图像,例如我将使用 www.google.com、www.facebook.com,该链接从获取到 perticuller 链接的图像。
  • 用图片查看我的问题更新..

标签: android facebook-graph-api url


【解决方案1】:

经过长时间的研究,我终于得到了答案。因为我必须在我的项目中使用JSOUP.jar 文件和暗示。可以在 HTML 中解析,我们可以使用 html 中的详细信息, 现在我想要图像、标题和描述,所以我将从 HTML 中获取。

public class MainActivity extends Activity {

Document document;
String url ;
ProgressDialog mProgressDialog;
TextView t1, t2;
ImageView img;
String title, desc, img_url;
Button btn;
EditText et;
Bitmap bitmap;
String UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    img = (ImageView) findViewById(R.id.imgIcon);
    t1 = (TextView) findViewById(R.id.txtTitle);
    t2 = (TextView) findViewById(R.id.txtDesc);
    btn = (Button) findViewById(R.id.button);
    et = (EditText) findViewById(R.id.editText);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            url = et.getText().toString();
            new FetchWebsiteData().execute();
        }
    });
}

private class FetchWebsiteData extends AsyncTask<Void, Void, Void> {
    String websiteTitle, websiteDescription, imgurl;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog = new ProgressDialog(MainActivity.this);
        mProgressDialog.setMessage("Loading...");
        mProgressDialog.setIndeterminate(false);
        mProgressDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            // Connect to website
            Document document = Jsoup.connect(url).userAgent(UserAgent).get();
            // Get the html document title
            websiteTitle = document.title();
            Elements description = document.select("meta[name=description]");
            // Locate the content attribute
            websiteDescription = description.attr("content");
            String ogImage = null;
            Elements metaOgImage = document.select("meta[property=og:image]");
            if (metaOgImage != null) {
                imgurl = metaOgImage.first().attr("content");
                System.out.println("src :<<<------>>> " + ogImage);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        t1.setText(websiteTitle + "------" + imgurl);
        t2.setText(websiteDescription);
        Picasso.with(getApplicationContext()).load(imgurl).into(img);
        mProgressDialog.dismiss();
    }

  }
 }

我用于查看所有数据的 XML 文件如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.copy.urlparsing.MainActivity">

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imgIcon"
    android:src="@drawable/asf"
    android:layout_alignBottom="@+id/txtDesc"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Medium Text"
    android:id="@+id/txtTitle"
    android:layout_above="@+id/imgIcon"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Medium Text"
    android:id="@+id/txtDesc"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="53dp" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/editText"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="New Button"
    android:id="@+id/button"
    android:layout_below="@+id/editText"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />
</RelativeLayout>

【讨论】:

  • 每次都会抛出异常
【解决方案2】:

您可以通过获取网站的 favicon 来获得。 Google 提供了一个URL,将域传递给查询它会获取图像。

另一种选择是直接从在域名中附加favicon.ico 的网站获取

正如你给出的 Skype 示例,它正在获取你传递的 url 的预览,而不是任何特定的图像。

(domain/favicon.ico)

【讨论】:

    猜你喜欢
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2015-10-12
    • 2013-05-28
    相关资源
    最近更新 更多