8

我正在寻找一个非常基本的功能。我正在尝试设计一个应用程序,我想要它做的就是从 URL 加载图像。我发现了一些问题和网站,但它们似乎都较旧且过时,但我认为我遇到的问题是将代码链接到 ImageView 的活动 main.xml。

您有任何建议或链接,我将不胜感激,谢谢。

4

4 回答 4

12

在这里,这就是我在图像视图中显示来自 url 的图像的方式
,您必须从主线程以外的线程调用此代码

ImageView img = (ImageView) findViewById(R.id.imageView1);
try {
        URL url = new URL("Your URL");
        //try this url = "http://0.tqn.com/d/webclipart/1/0/5/l/4/floral-icon-5.jpg"
        HttpGet httpRequest = null;

        httpRequest = new HttpGet(url.toURI());

        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response = (HttpResponse) httpclient
                .execute(httpRequest);

        HttpEntity entity = response.getEntity();
        BufferedHttpEntity b_entity = new BufferedHttpEntity(entity);
        InputStream input = b_entity.getContent();

        Bitmap bitmap = BitmapFactory.decodeStream(input);

        img.setImageBitmap(bitmap);

    } catch (Exception ex) {

    }

小心不要忘记用 try catch 包围代码(我已经在这段代码中这样做了)

或者您可以使用 webview 从 url 加载图像

WebView web = (WebView) findViewById(R.id.webView1);
web.loadUrl("Your Url");

如果您尝试从资产文件夹加载图像,则 URL 将像这样“file:///android_asset/yourimage.jpg”开始,
否则正常的 Internet url 像这样“ http://0.tqn.com/d/webclipart/1 /0/5/l/4/floral-icon-5.jpg "

希望这对你有用祝你好运

于 2013-02-14T03:28:36.610 回答
4

有一个名为 imageloader 的开源库。应用广泛,可以直接使用,也可以编写类似的代码。

https://github.com/nostra13/Android-Universal-Image-Loader

于 2013-02-14T03:28:39.050 回答
0

You can take the image and on your php side convert it into a base64 and then on Android side decode it into a image.

于 2013-02-14T05:03:25.923 回答
0

下载图像的最佳做法是在后台线程上完成,这样它就不会中断您的主线程,然后根据需要更新用户界面。

公共类 MainActivity 扩展 AppCompatActivity {

FrameLayout frameLayout;
ImageView imageView;
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    frameLayout= (FrameLayout) findViewById(R.id.containerlayout);
    imageView= (ImageView) findViewById(R.id.imageView);
    progressBar= (ProgressBar) findViewById(R.id.progressBar);

    String url="http://www.flat-e.com/flate5/wp-content/uploads/cover-960x857.jpg";
    MyTask myTask= new MyTask();
    myTask.execute(url);
}
class MyTask extends AsyncTask<String, Void, Bitmap> {

    @Override
    protected void onPreExecute() {
        progressBar.setVisibility(View.VISIBLE);
    }

    @Override
    protected Bitmap doInBackground(String... voids) {

        Bitmap bitmap=null;
        try {
            URL url =new URL(voids[0]);
            HttpURLConnection connection= (HttpURLConnection) url.openConnection();
            InputStream inputStream= connection.getInputStream();
            bitmap = BitmapFactory.decodeStream(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        progressBar.setVisibility(View.GONE);
        imageView.setImageBitmap(bitmap);

    }
}

}

在这里,在这个例子中,我创建了一个内部类 MyTask,它扩展了我完成所有网络操作的 AsyncTask。确保在您的清单文件中添加使用权限。

希望这对你也有效。

于 2016-10-05T10:49:30.347 回答