10.网络服务

本文介绍了Android中WebView的基本使用,包括设置权限、加载网页。同时,讲解了Retrofit的基本概念和用法,展示了如何创建接口、发起网络请求以及处理回调。通过示例代码,演示了Retrofit如何进行异步请求并更新UI。
摘要由CSDN通过智能技术生成

webview的简单使用

要使用webview很简单,不过要在androidmainfest.xml声明权限。

权限:

<uses-permission android:name="android.permission.INTERNET"/>

aictiviy代码:

public class WebViewActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        WebView webView =findViewById(R.id.web_but1);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl("https://www.baidu.com");
    }
}

布局里面就一个控件:

    <WebView
        android:id="@+id/web_but1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:ignore="MissingConstraints" />

Retrofit基本用法

retorfit是基于okhttp封装的异步请求网络组件。

因为异步代码不能操作UI。所以需要使用回调方式来解决。回调是用接口来实现的。

为什么会出现回调?
当外部的调用者启用一个线程执行任务,不管线程执行情况如何,都不会阻塞当前代码等线程返回执行结果,而是选择继续执行下面的代码。如果需要线程执行完任务,就交给外部调用者处理返回结果,就需要用到回调了。

具体的做法是,线程放在独立的函数里,调用者调用该函数,传递一个对象,这个对象是调用者的内部类,内部类里面的方法接收线程返回的结果,可以直接通过访问外部成员和返回的结果进行关联操作。

这样线程函数接收到这个对象,执行完后,直接将结果传递给传递过来的对象函数即可。

举个例子:

//建立一个接口,
interface AppService{
    fun invoke(User u)
}

线程信息:

fun void run(AppService service){
    Thread{
        //线程任务信息
        
        //回调,返回结果信息
        service.invoke(user)
    }
    
}

调用者:

//调用线程任务的函数,传递匿名类,类中invoke方法接受线程返回结果,调用者直接处理这个结果
run(new AppSerive{
    override fun invoke(User u){
        //处理u,并且和外部类成员交互
    }
})

这就完成了回调。

Retrofit 也是将请求信息给线程信息执行,执行完回调完成整个请求过程。

具体示例如下:

1、访问网络,先在Androidmainfest.xml声明权限:

<uses-permission android:name="android.permission.INTERNET"/>

2、建立一个处理数据的接口

public interface AppService{
    @GET("resouce/list")
    Call<ResouceBean> invoke();
}

call类型为retfofile内置类型,是固定写法,返回一个约束的对象。

3、调用者:


public class WebViewActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        Button btn = findViewById(R.id.btn_open_web);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //构建Retrofit对象
                Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("域名")
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();
                
                AppService appService =retrofit.create(AppService.class);
                //enqueue线程异步请求,因为线程无法直接操作UI,所以将对象传入,在enqueue完成后,调用对象方法,完成UI更新,称为回调。
                appService.invoke().enqueue(new Callback<ResouceBean>() {
                    @Override
                    public void onResponse(Call<ResouceBean> call, Response<ResouceBean> response) {
                        // 处理结果
                        ResouceBean body = response.body();
                    }

                    @Override
                    public void onFailure(Call<ResouceBean> call, Throwable t) {
                        //处理失败
                        t.printStackTrace();
                    }
                });
            }
        });
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT老卢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值