httpUrlConnection 用法示例

本文介绍了如何使用 HttpUrlConnection 在 Android 中进行网络请求,包括GET和POST方式加载网络图片、查询手机号码归属地,以及获取JSON字符串的方法。通过示例代码展示了HttpUrlConnection的基本用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、httpUrlConnection + get 加载网络图片

由于xml界面过于简单,因此直接省略,下面是具体的java代码。

public class MainActivity extends AppCompatActivity {
    private static final int IMG_GET = 1001 ;
    private ImageView imageView;
    private Button button;
    private Handler handler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content_main);
    imageView = findViewById(R.id.imageView);
    button = findViewById(R.id.button);

    handler = new Handler(new Handler.Callback() {          
        @Override
        public boolean handleMessage(Message message) {
            if (message.what == IMG_GET){
                Bitmap bitmap = (Bitmap) message.obj;
                imageView.setImageBitmap(bitmap);                  //主线程修改UI
                return true;             //返回true,不需要其他人再处理
            }
            return false;
        }
    });

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new Thread(new Runnable() {                  //子线程访问网络,加载图片
                @Override
                public void run() {
                    setHttpUrlConnectionGet();
                }
            }).start();
        }
    });
}

private void setHttpUrlConnectionGet() {
    String imgurl = "http://pic33.nipic.com/20131007/13639685_123501617185_2.jpg";
    try {
        URL url = new URL(imgurl);
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
        int code = httpURLConnection.getResponseCode();
        Log.e("urlConnection","code = " + code);               //code=200,表示连接成功

        InputStream inputStream = httpURLConnection.getInputStream();        //get
        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
        Message message = Message.obtain();           
        message.what = IMG_GET;
        message.obj = bitmap;
        handler.sendMessage(message);                 //发送携带message.what和message.obj的消息

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        StringBuffer stringBuffer = new StringBuffer();
        String line = bufferedReader.readLine();
        while (line != null){
            stringBuffer.append(line);               //将每次读到的line接到stringBuffer后面
            line = bufferedReader.readLine();
        }
        Log.e("urlConnection","stringBuffer = " + stringBuffer.toString());
    }catch (IOException e){
        e.printStackTrace();
    }
  }
}

二、httpUrlConnection + get 查询手机号码归属地

由于xml界面过于简单,因此直接省略,下面是具体的java代码。

public class MainActivity extends AppCompatActivity {
    private static final int GET_PHONE = 1001 ;
    private Button button;
    private Handler handler;
    private EditText editText;
    private TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content_main);
    button = findViewById(R.id.button);
    editText = findViewById(R.id.edit_Text);
    textView = findViewById(R.id.text_Phone);

    handler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message message) {
            if (message.what == GET_PHONE){
                String json = message.obj.toString();
                try {
                    JSONObject jsonObject = new JSONObject(json);            //初始化JSONObject对象
                    JSONObject result = jsonObject.optJSONObject("result");
                    String resultPhone = result.optString("province")
                            +result.optString("city")
                            +result.optString("company");
                    textView.setText(resultPhone);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                return true;
            }
            return false;
        }
    });

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    String phone = editText.getText().toString();
                    setHttpUrlConnectionGet(phone);
                }
            }).start();
        }
    });
}

private void setHttpUrlConnectionGet(String phone) {
    String baseUrl = "http://apis.juhe.cn/mobile/get";
    String phoneUrl = baseUrl.concat("?phone=").concat(phone).concat("&key=")
            .concat("9f392fc948a5703e7ae4779b0ee94dd1");
    try {
        URL url = new URL(phoneUrl);
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
        httpURLConnection.setRequestMethod("GET");
        httpURLConnection.setConnectTimeout(10000);

        int code = httpURLConnection.getResponseCode();
        Log.e("urlConnection","code = " + code);
        if (code != 200){
            return;
        }

        InputStream inputStream = httpURLConnection.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        StringBuffer stringBuffer = new StringBuffer();
        String line = bufferedReader.readLine();
        while (line != null){
            stringBuffer.append(line);
            line = bufferedReader.readLine();
        }

        Log.e("urlConnection","stringBuffer = " + stringBuffer);
        Message message = Message.obtain();
        message.what = GET_PHONE;
        message.obj = stringBuffer.toString();
        handler.sendMessage(message);
    }catch (IOException e){
        e.printStackTrace();
    }
  }
}

在这里插入youyu===图片描述
三、总结 httpUrlConnection + get 拿到 json 字符串的工具类

public class RequestServer {
private static String TAG = "RequestServer";

public static String RequestServer(String urlString) {
        BufferedReader br = null;
        HttpURLConnection conn = null;
        stringBuffer sb = new stringBuffer();
        try {
            URL reqURL = new URL(urlString);
            conn = (HttpURLConnection) reqURL.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(10000);
            //打开网络通讯输入流
            int code = conn.getResponseCode();
            Log.e(TAG,"code ="+code);
            if (code != 200){
                return null;
            }

        InputStream is = conn.getInputStream();
        InputStreamReader isr = new InputStreamReader(is, "utf-8");   //通过InputStream is 创建InputStreamReader对象
        br = new BufferedReader(isr);    //通过InputStreamReader isr 创建BufferReader对象
        String line;
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (conn != null) {
            conn.disconnect();
        }
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //return "{"msg":"绑定成功","return":true}
    return sb.toString();
  }
}

四、httpUrlConnection + post 查询手机号码归属地

由于xml界面过于简单,因此直接省略,下面是具体的java代码。其实post方法和get方法差不多,只是向服务器传递接口所需参数的方式有所区别,get方法比post方法简单方便,post需要将参数插入输出流中传往服务器,较繁琐。

public class MainActivity extends AppCompatActivity {
    private static final int GET_PHONE = 1001 ;
    private Button button;
    private Handler handler;
    private EditText editText;
    private TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content_main);
    button = findViewById(R.id.button);
    editText = findViewById(R.id.edit_Text);
    textView = findViewById(R.id.text_Phone);

    handler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message message) {
            if (message.what == GET_PHONE){
                String json = message.obj.toString();
                try {
                    JSONObject jsonObject = new JSONObject(json);
                    JSONObject result = jsonObject.optJSONObject("result");
                    String resultPhone = result.optString("province")
                            +result.optString("city")
                            +result.optString("company");
                    textView.setText(resultPhone);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                return true;
            }
            return false;
        }
    });

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    String phone = editText.getText().toString();
                    setHttpUrlConnectionPost(phone);
                }
            }).start();
        }
    });
}

private void setHttpUrlConnectionPost(String phone) {
    String baseUrl = "http://apis.juhe.cn/mobile/get";
    try {
        URL url = new URL(baseUrl);
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
        httpURLConnection.setRequestMethod("POST");
        httpURLConnection.setConnectTimeout(10000);
        httpURLConnection.setDoInput(true);
        httpURLConnection.setDoOutput(true);

        /** 向服务器写入接口需要的phone、key两个参数 */
        String body = "phone=".concat(phone).concat("&key=").concat("9f392fc948a5703e7ae4779b0ee94dd1");
        OutputStream os = httpURLConnection.getOutputStream();
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(os,"utf-8"));
        bufferedWriter.write(body);
        bufferedWriter.flush();
        bufferedWriter.close();

        int code = httpURLConnection.getResponseCode();
        Log.e("urlConnection","code = " + code);
        if (code != 200){
            return;
        }

        InputStream is = httpURLConnection.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is,"utf-8"));
        StringBuffer stringBuffer = new StringBuffer();
        String line = bufferedReader.readLine();
        while (line != null){
            stringBuffer.append(line);
            line = bufferedReader.readLine();
        }

        Log.e("urlConnection","stringBuffer = " + stringBuffer);
        Message message = Message.obtain();
        message.what = GET_PHONE;
        message.obj = stringBuffer.toString();
        handler.sendMessage(message);
    }catch (IOException e){
        e.printStackTrace();
    }
  }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值