通过网络图片地址来访问图片的实现方法!

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{

    protected static final String TAG = "MainActivity";
    ImageView image = null;
    EditText edit = null;
    
    Handler handler = new Handler(){

        //接收一个消息
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            
            if(msg.what == 1)
            {
                Bitmap bitmap = (Bitmap) msg.obj;
                image.setImageBitmap(bitmap);
            }
            
        }
    };
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        image = (ImageView) findViewById(R.id.img);
        edit = (EditText) findViewById(R.id.et_net);
        Button button = (Button) findViewById(R.id.bt_get);
        
        button.setOnClickListener(this);
    }

    /**
     * 1.访问网络不能直接放在主方法里面(android.os.NetworkOnMainThreadException),应该放在一个线程里面
     * 2. android.view.ViewRootImpl$CalledFromWrongThreadException: 只能在主线程或者UI线程里面修改视图,应该用通信来解决

     * 
     */
    @Override
    public void onClick(View v)
    {
        final String uri = edit.getText().toString(); //拿到图片的网络地址
        
        
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                Bitmap bitmap = getImageFromNet(uri);
                if(null != bitmap)
                {
                    Message msg = new Message();
                    msg.what = 1; //你是谁
                    msg.obj = bitmap;
                    
                    handler.sendMessage(msg); //发送一个消息
                    
                    //image.setImageBitmap(bitmap); 
                    Log.i(TAG, "========" + bitmap);
                }else
                {
                    //Toast.makeText(MainActivity.this, "获取图片失败", 0).show();
                }
            }
        }).start();
        
        
        
    }
    
    //返回的不是image了 返回的是bitmap >> 位图
    public Bitmap getImageFromNet(String uri)
    {
        HttpURLConnection conn = null;
        
        try {
            //1.首先将地址转换为Uri
            //Uri net_uri = Uri.parse(uri); //这种方式是错误的
            URL url = new URL(uri);
            
            //2. 获取网络连接
            conn = (HttpURLConnection) url.openConnection(); //这个地方要转换一次,转换为你获取图片的协议连接
            
            //3. 设置请求的一些常用的参数
            conn.setConnectTimeout(30000);//设置超时
            conn.setDoInput(true); //设置请求可以放服务器写入数据
            conn.setReadTimeout(30000); //设置连接去读取数据的超时时间
            
            //4.真正请求图片,然后把从网络上请求到的二进制流保存到了inputStream里面
            conn.connect();
            
            InputStream in = conn.getInputStream();
            
            Bitmap bitmap = BitmapFactory.decodeStream(in); //BitMap的图片工厂,创建出一个图片
            
            //5. 关闭连接
            
            return bitmap;
            
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally
        {
            //5. 关闭连接
            if(null != conn)
            {
                conn.disconnect(); 
            }
        }
        
        return null;
    }
}

 

转载于:https://www.cnblogs.com/labixiaoxin/p/4932670.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的示例代码,它使用 Go 编程语言实现网络下载图片并将其上传到 AWS S3 存储桶中,然后从存储桶中访问图片。在运行此代码之前,请确保您已经安装了 AWS SDK for Go 和 Go 的其他依赖项。 ```go package main import ( "fmt" "io/ioutil" "net/http" "os" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" ) func main() { // 下载图片 resp, err := http.Get("https://example.com/image.jpg") if err != nil { fmt.Println("Error downloading image:", err) return } defer resp.Body.Close() // 读取图片数据 data, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println("Error reading image data:", err) return } // 创建 AWS S3 会话 sess, err := session.NewSession(&aws.Config{ Region: aws.String("us-west-2"), // 替换为您的实际区域 }) if err != nil { fmt.Println("Error creating AWS session:", err) return } // 将图片上传到 S3 存储桶 svc := s3.New(sess) _, err = svc.PutObject(&s3.PutObjectInput{ Bucket: aws.String("my-bucket"), // 替换为您的实际存储桶名称 Key: aws.String("image.jpg"), // 替换为您想要为图片设置的键名称 Body: bytes.NewReader(data), }) if err != nil { fmt.Println("Error uploading image to S3:", err) return } // 从 S3 中访问图片 url := fmt.Sprintf("https://s3-%s.amazonaws.com/%s/%s", *sess.Config.Region, "my-bucket", "image.jpg") // 替换为您的实际存储桶名称 fmt.Println("Image URL:", url) } ``` 请注意,此示例代码假设您已经正确配置了 AWS SDK for Go 和您的 AWS 凭证。如果您还没有配置这些内容,请参考 AWS SDK for Go 文档中的说明进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值