Android访问网络资源

当我们写AndroidAPP的时候,一定会考虑一个很重要的问题,那就是如何让APP能调用网上的其他资源呢?这时候就需要用到URL(Uniform Resource Locator)。

URL代表统一资源定位器,它是指向互联网“资源”的指针。所谓的资源,可以是简单的文件或者目录,也可以是更复杂的对象的引用,比如对数据库、搜索引擎的查询等等。通常来说,URL可以由协议名、主机、端口和资源组成,以下为格式:

 protocol://host:port/resource

URL类提供了多个构造器用于创建URL对象,一旦获得了URL对象之后,就可以调用如下常用方法来访问该URL对应的资源了。

->String getFile():获取此URL的资源名;
->String getHost():获取此URL的主机名;
->String getPath():获取此URL的路径部分;
->String getPort():获取此URL的端口号;
->String getProtocol():获取此URL的协议名称;
->String getQuery():获取此URL的查询字符串部分;
->URLConnection openConnection():返回一个URLConnection对象,它表示到URL所引用的远程对象的连接;
InputStream openStream():打开与此URL的连接,并返回一个用于读取该URL资源的InputStream。

示例、

网络权限
首先我们要知道,连接网络资源肯定是需要访问互联网的,这就涉及到网络权限的问题了。这需要我们在AndroidManifest.xml中添加以下授权代码:

<!--授权网络权限-->
<user-permission android:name="android.permission.INTERNET"/>

布局文件和Java部分
我们先把activity_main.xml中的布局修改一下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/tv_show"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Hello World!"/><Buttonandroid:id="@+id/btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="@string/app_name" />
</RelativeLayout>

接着我们在MainActivity.java中,写下调用接口的方法,并将它在文本框显示出来

package com.example.ajoke;import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.TextView;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private TextView mTvShow;private HttpURLConnection connection;private InputStream inputStream;private BufferedReader bufferedReader;private final int GET_DATA_SUCCESS = 101;//获取成功的标志@SuppressLint("HandlerLeak")Handler mHandler = new Handler(new Handler.Callback() {public boolean handleMessage(Message msg){if (msg.what==GET_DATA_SUCCESS){String data = msg.getData().getString("data");mTvShow.setText(data);}return false;}});@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化控件initUI();//初始化数据initData();}private void initUI() {//获取文本框mTvShow = findViewById(R.id.tv_show);//获取按钮并绑定监听事件findViewById(R.id.btn).setOnClickListener(this);}@Overridepublic void onClick(View v) {initData();}//初始化数据private void initData() {new Thread(new Runnable() {@Overridepublic void run() {String data = getDataFromServer();//创建信息对象Message message = Message.obtain();Bundle bundle = new Bundle();bundle.putString("data",data);message.setData(bundle);message.what = GET_DATA_SUCCESS;//向主线程发信息mHandler.sendMessage(message);}}).start();}//从服务器获取数据private String getDataFromServer() {HttpURLConnection connection = null;InputStream inputStream = null;BufferedReader bufferedReader = null;try {//创建URLURL url = new URL("https://autumnfish.cn/api/joke");//打开连接connection = (HttpURLConnection) url.openConnection();//判断并处理结果//请求网络状态码200为正常if (connection.getResponseCode()==200){//获取输入流inputStream = connection.getInputStream();bufferedReader = new BufferedReader(new InputStreamReader(inputStream));StringBuilder stringBuilder = new StringBuilder();for (String line = "";(line = bufferedReader.readLine())!=null;){stringBuilder.append(line);}return stringBuilder.toString();}}catch (Exception e){e.printStackTrace();}finally {try {if (bufferedReader!=null)bufferedReader.close();if (inputStream!=null)inputStream.close();if (connection!=null)connection.disconnect();}catch (Exception e){e.printStackTrace();}}return "";}
}

结果
以下就是代码的效果

林泽彬
原文链接:https://blog.csdn.net/m0_71507626/article/details/128174851

Android访问网络资源相关推荐

  1. Android:访问网络资源,在手机本地显示网络资源源代码

    网页源代码查看器 目录 网页源代码查看器 一.项目目录结构 二.类:MainActivity 三.类:Utils 四.activity_main.xml 五.AndroidManifest.xml(加 ...

  2. Android开发之使用URL访问网络资源

    Android开发之使用URL访问网络资源 URL (UniformResource Locator)对象代表统一资源定位器,它是指向互联网"资源"的指针.资源可以是简单的文件或目 ...

  3. python使用osgeo库_Python使用内置urllib模块或第三方库requests访问网络资源

    前言 更多内容,请访问我的 个人博客. Python 访问网络资源有很多方法,urllib, urllib2, urllib3, httplib, httplib2, requests ,现介绍如下两 ...

  4. Android访问WCF服务(使用json实现参数传递)

    经过多日努力, 终于勉强弄明白了Android访问WCF服务的方法. 服务端实现 一, 实现服务. 操作契约 [csharp] view plaincopy [ServiceContract] pub ...

  5. Android访问网络系列之--访问图片

    今天闲着无聊,顺便做了个android 访问网络图片的demo,希望与大家分享下: 下面是主要代码: 1.main.xml <?xml version="1.0" encod ...

  6. win7 从网络访问此计算机',在里面把guest用户组添加上,大白菜修复win7系统没有权限访问网络资源的办法...

    我们在使用win7系统的过程中,经常需要对win7系统没有权限访问网络资源的问题,有很多人清楚如何处理,但是对于新接触的伙伴们,win7系统没有权限访问网络资源到底该如何设置?其实解决win7系统没有 ...

  7. AD域外计算机共享域内打印机出现“无法访问,没有权限访问网络资源,用户不得从此工作站登录网络”

    环景: win2019AD域 win10专业版 HP132打印机 问题描述: 之前是可以访问 AD域外计算机共享域内一台打印机出现"无法访问,没有权限访问网络资源,用户不得从此工作站登录网络 ...

  8. 你的PC机或者终端,是怎么上网的?怎么连接到网络的?无线网怎么接入Internet,如何访问网络资源?

    你的PC机或者终端,是怎么上网的?怎么连接到网络的?无线网怎么接入Internet,如何访问网络资源? 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发 ...

  9. Android:访问存储失败.FileNotFoundException open failed: XXXXXXX EPERM (Operation not permitted)

    Android:访问存储失败.FileNotFoundException open failed: XXXXXXX EPERM (Operation not permitted) 设备/引擎:Mac( ...

最新文章

  1. 在请求完成后回调delegate的方法。然而回调时经常遇到这种情况:delegate已经被释放...
  2. Netty源码解析4-Handler综述
  3. 牛客网 【每日一题】6月8日 [SCOI2005]最大子矩阵
  4. 如何提升软件交付效能?答案未必如你所想
  5. 合数分解1(C语言)
  6. 计算机中那些事儿(四):我眼中的虚拟技术
  7. C程序设计 -- 随笔
  8. win7打补丁显示不适用计算机,更新win7系统提示“此更新不适用于您的计算机”如何解决...
  9. 小程序webview内嵌h5链接第二次打开空白
  10. minIO如何设置直接通过访问链接在浏览器中打开文件
  11. Android P 正式到来
  12. 乐动机器人 2D DTOF激光雷达 LD06、LD19驱动包开源仓库分享
  13. matlab中gain怎么设置,pid调节中的gain是什么意思?
  14. C语言实现9宫格数独
  15. 读书笔记——吴翰清《白帽子讲Web安全》
  16. Windows系统怎么使用TeamViewer打印
  17. 解决c3p0连接池异常问题
  18. JAVA-【将字符串中的英文括号替换为中文括号】
  19. 编写代码、打印图4-2所示的图形python_Python之turtle库画各种有趣的图及源码(更新中)_一个超会写Bug的程序猿的博客-CSDN博客...
  20. python 入门零碎知识点

热门文章

  1. 2021泰安市地区高考成绩排名查询,泰安高中学校实力排名,2021年泰安所有的高中分数线排名...
  2. windos下快捷键给文件、文件名重命名
  3. redisson watchdog 使用和原理
  4. 锚定情境法(二):如何合理选择情境题?
  5. linux双击运行jar包,linux下发布JAR包 并运行
  6. TI公司LDO电源芯片的选用
  7. 达芬奇密码 第七十一章
  8. 图论期末复习(《图论机器应用》——朴月华)
  9. MSP430G2553-引脚简单使用
  10. 裸眼3D全息投影技术