救救可怜的孩子吧

救救可怜的孩子吧

package com.example.connection;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private static final int GET_DATA_SUCCESS =1 ;
    private static final int SERVER_ERROR =2;
    private  Button button;
    private ImageView imageView;
    private DiglettHandler mHandler = new DiglettHandler(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       button=(Button)findViewById(R.id.button);
       imageView=(ImageView)findViewById(R.id.image_view);
       button.setOnClickListener(this);

    }



    public void onClick(View v){
        switch (v.getId()){
            case  R.id.button:
               new GetPicThread().start();

                break;
        }


    }

    public static class  DiglettHandler extends Handler
    {
         public  final WeakReference<MainActivity> mWeakReference;
         public  DiglettHandler(MainActivity activity){
             mWeakReference = new WeakReference<>(activity);
         }
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
           MainActivity activity = mWeakReference.get();
            Bitmap bitmap = (Bitmap) msg.obj;
            activity.imageView.setImageBitmap(bitmap);
            }
        }


public class GetPicThread extends Thread implements Runnable {

    public void run() {
        try {
            //获取请求的url地址
            URL url = new URL("https://img1.sycdn.imooc.com//5adfee7f0001cbb906000338-240-135.jpg");
            //获得URL请求连接的对象
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            //设置超时时间
            connection.setConnectTimeout(100 * 1000);
            //设置请求的方式
            connection.setRequestMethod("GET");
            //传输数据包格式
            connection.setRequestProperty("Content0-Type", "application/json");
            //传输数据的格式
            connection.setRequestProperty("Charset", "UTF-8");
            connection.setRequestProperty("Accept-Charset", "UTF-8");
            connection.connect();//发起连接
            int resopnseCode = connection.getResponseCode();
            String responseMessage = connection.getResponseMessage();
            if (resopnseCode == HttpURLConnection.HTTP_OK) {
                InputStream inputStream = connection.getInputStream();                        //使用工厂把网络的输入流生产Bitmap
                Bitmap bitmap = BitmapFactory.decodeStream(inputStream);//利用Message把图片发给Handler
                Message msg = Message.obtain();
                msg.obj = bitmap;
                msg.what = GET_DATA_SUCCESS;
                mHandler.sendMessage(msg);
                inputStream.close();


            }
            else {
                //服务启发生错误
                mHandler.sendEmptyMessage(SERVER_ERROR);

            }
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
}
老师我点了按钮后图片不显示,我已经添加了网络权限了
报错信息:
2019-10-23 12:24:15.807 12409-18176/? E/ResolverController: No valid NAT64 prefix (100, <unspecified>/0)
2019-10-23 12:24:15.822 18127-18175/com.example.connection W/System.err: java.net.SocketException: socket failed: EPERM (Operation not permitted)
2019-10-23 12:24:15.822 18127-18175/com.example.connection W/System.err:     at java.net.Socket.createImpl(Socket.java:492)
2019-10-23 12:24:15.822 18127-18175/com.example.connection W/System.err:     at java.net.Socket.getImpl(Socket.java:552)
2019-10-23 12:24:15.822 18127-18175/com.example.connection W/System.err:     at java.net.Socket.setSoTimeout(Socket.java:1180)
2019-10-23 12:24:15.822 18127-18175/com.example.connection W/System.err:     at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:143)
2019-10-23 12:24:15.824 18127-18175/com.example.connection W/System.err:     at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
2019-10-23 12:24:15.824 18127-18175/com.example.connection W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
2019-10-23 12:24:15.824 18127-18175/com.example.connection W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕雪 2019-10-23 13:51:48

你的设备呢?如果是9.0以上,还需要增加网络安全配制,可以参见《Android网络操作》3-6。如果用到SD卡的读写权限的话,6.0以上还需要增加动态申请可以参见《Android本地文件操作》3-5。

  • 提问者 慕工程6972752 #1
    也就是这个代码本身是没有错误吗.....
    2019-10-23 15:01:30
  • 提问者 慕工程6972752 #2
    W/System.err: java.net.SocketException: socket failed: EPERM (Operation not permitted) W/System.err: at java.net.Socket.createImpl(Socket.java:492) at java.net.Socket.getImpl(Socket.java:552) 我添加网络安全了,又错了···
    2019-10-23 15:07:56
  • 提问者 慕工程6972752 #3
    android:networkSecurityConfig="@xml/network_security_config">
    2019-10-23 15:09:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.Android 网络操作与流行框架
  • 参与学习           人
  • 提交作业       220    份
  • 解答问题       1800    个

本阶段是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理;从文件存储、到轻量级数据库SQLite的使用;最后利用最流程的第三方框架助你快速开发企业级APP。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师