Android 网络编程-网络请求

Android 网络编程-网络请求

文章目录

  • Android 网络编程-网络请求
    • 一、主要内容
    • 二、开发网络请求前的基本准备
      • 1、查看需要请求的网址是否有效
        • (1)通过网页在线验证
        • (2)使用专用window网咯请求工具
        • (3)编写app代码验证
      • 2、学会把服务器的json数据转换成Bean对象
      • 3、具体效果测试
        • 简单测试的网址:
          • 天气api:
          • apipost调试网址
        • (1)get请求,在浏览器窗口栏请求的显示
        • (2)get请求在在线请求网址的显示
        • (3)post请求在在线请求的的网址显示
        • (4)json数据在线转换成Bean对象
        • 应用app效果显示;
    • 三、代码介绍
      • 1、普通网络请求
        • (1)get网络请求
        • (2)Post网络请求
      • 2、使用OkHttp网络框架请求网络
        • (1)Get网络请求
        • (2)Post网络请求
      • 3、使用Retrofit网络框架请求网络
        • (1)Get网络请求
          • ①创建请求接口对象
          • ② 具体的请求代码
        • (2)Post网络请求
          • ①创建请求接口对象
          • ② 具体的请求代码
      • 4、使用WebView显示对应网址的网页
        • (1)在布局文件写入控件WebView
        • (2) 设置基本参数
    • 三、总结
      • 1、网络请求是要在子线程内进行
      • 2、不同框架的网络请求根据项目具体情况使用
      • 3、Android 网络编程要学习些什么
        • (1)网络分层和HTTP协议基本知识,比如请求报文和响应报文
        • (2)Java网络编程基础,TCP/UDP 进行连接交互
        • (3)Json数据转Gson对象
        • (4)Android基本网络请求和基本网络框架使用
        • (5)加密算法:数据加密和解密

本文介绍一下Android 网络请求,开发了简单demo,适合Android入门人员学习。

为啥要写这个??给应届生看的。。。

一、主要内容

1、开发网络请求前的基本准备
2、普通网络请求代码
3、使用OkHttp网络框架请求网络代码
4、使用Retrofit网络框架请求网络代码
5、使用WebView显示对应网址的网页
6、应用demo的相关代码和apk

二、开发网络请求前的基本准备

1、查看需要请求的网址是否有效

(1)通过网页在线验证

能验证get请求和简单的post 请求,比如只设置几个参数的post请求
在线get/post请求测试(里面还有一系列工具):
http://www.jsons.cn/httpurl/
http://coolaf.com/

//可以简单模拟 get/post返回的数据
https://v7.apipost.cn/#/apis/design

(2)使用专用window网咯请求工具

① PostMan
② Apifox (国内自研,PostMan加强版,支持网页和桌面工具)
https://apifox.com/#pricing

(3)编写app代码验证

一般用于验证文件上传的情况,
也可以用windows 工具进行验证,Apifox 也是支持文件上传的。

2、学会把服务器的json数据转换成Bean对象

在线转换Json格式转换JAVA实体Bean类:
http://www.jsons.cn/json2java/

作用?
把字符串的数据赋值到对象,使用的时候直接使用 Object.getXXX 获取返回的某个信息。

也可以使用Android Studio 插件:GsonFormat

3、具体效果测试

get请求测试,可以找网上天气网址的api或者笑话类的api网址;
post请求测试,可以找地图类的api(百度地图),或者语音类的api网址(讯飞)。

简单测试的网址:

天气api:

提供天气,气象查询:https://www.yiketianqi.com/index/doc
get请求网址;
https://v0.yiketianqi.com/api?unescape=1&version=v61&appid=28392918&appsecret=No9zfo8f&adcode=440307000000

apipost调试网址

提供get/post简单调试功能:https://v7.apipost.cn/#/apis/design
注册登陆后,看起来是可以设计返回的数据的,估计是操作要麻烦一点,有需要的可以自己研究。

post请求网址:
https://demo-api.apipost.cn/api/demo/login
mobile=18289454846&ver_code=123456

(1)get请求,在浏览器窗口栏请求的显示

在这里插入图片描述

(2)get请求在在线请求网址的显示

在这里插入图片描述

(3)post请求在在线请求的的网址显示

post 请求在浏览器输入行直接是无法请求到数据的,只能使用专业的网址或者工具 获取post请求的数据。

在这里插入图片描述

(4)json数据在线转换成Bean对象

在这里插入图片描述

应用app效果显示;

主界面:
在这里插入图片描述

普通网络请求:

在这里插入图片描述

OkHttp网络请求:
在这里插入图片描述

retrofit网络请求:
在这里插入图片描述
为啥这里TextView显示的不对,大家可以在代码里面看看。

WebView界面:
在这里插入图片描述

应用demo里面显示了很多WebView界面,这里只展示其中一个。

代码资源下载地址:

https://download.csdn.net/download/wenzhi20102321/88215651

三、代码介绍

1、普通网络请求

网络请求一定要在子线程执行,否则会报错。
数据返回后要显示在界面上要切换回主线程。

(1)get网络请求

    //get方法请求网络
    public void getNetwork(View view) {
        GET_UTL = et_url_get.getText().toString();
        LogUtil.debugInform("GET_UTL = " + GET_UTL);
        //创建线程,请求网络
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 创建一个URL对象
                URL url = null;
                try {
                    url = new URL(GET_UTL);

                    // 创建一个HttpURLConnection对象,并设置请求方法为GET
                    HttpURLConnection connection = null;
                    connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(5000);
                    // 获取服务器响应的状态码
                    int responseCode = 0;
                    responseCode = connection.getResponseCode();
                    if (responseCode == HttpURLConnection.HTTP_OK) {
                        // 读取服务器响应的数据
                        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                        StringBuilder response = new StringBuilder();
                        String line;
                        while ((line = reader.readLine()) != null) {
                            response.append(line); //把读取的数据不断放入response对象中
                        }
                        reader.close();
                        // 在UI线程中更新UI  runOnUiThread
                         String responseData = response.toString();
                

                    }


                } catch (Exception e) {
                    e.printStackTrace();
                    LogUtil.error("", e);
                }


            }
        }).start();

    }

(2)Post网络请求


  //post方法请求王网络
    public void postNetwork(View view) {
       
        //创建线程,请求网络
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 创建一个URL对象
                URL url = null;
                try {
                    url = new URL(POST_UTL);

                    // 创建一个HttpURLConnection对象,并设置请求方法为GET
                    HttpURLConnection connection = null;
                    connection = (HttpURLConnection) url.openConnection();
                    connection.setConnectTimeout(5000);

                    //------------------------------ 区别和Get方法 ,Start
                    connection.setRequestMethod("POST");

                    // 启用输出流,以便向服务器发送数据
                    connection.setDoOutput(true);

                    // 创建一个输出流对象,并将数据写入输出流
                    OutputStream outputStream = connection.getOutputStream();
                    String postData = POST_MESSAGE;
                    outputStream.write(postData.getBytes());
                    outputStream.flush();
                    outputStream.close();
                    //------------------------------ 区别和Get方法 ,End

                    // 获取服务器响应的状态码
                    int responseCode = connection.getResponseCode();
                    if (responseCode == HttpURLConnection.HTTP_OK) {
                        // 读取服务器响应的数据
                        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                        StringBuilder response = new StringBuilder();
                        String line;
                        while ((line = reader.readLine()) != null) {
                            response.append(line); //把读取的数据不断放入response对象中
                        }
                        reader.close();
                        // 在UI线程中更新UI
                         // 处理服务器响应的数据
                        String responseData = response.toString();

                    }


                } catch (Exception e) {
                    e.printStackTrace();
                    LogUtil.error("", e);
                }


            }
        }).start();
    }

2、使用OkHttp网络框架请求网络

(1)Get网络请求


    //get方法请求网络
    public void getNetwork(View view) {
    
        Request request = new Request.Builder()
                .url(GET_UTL)
                .get() //默认为get ,不设置也行
                .build();
        Call call = client.newCall(request);
        //网络请求的回调
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
                Toast.makeText(OkhttpNetworkActivity.this, "请求错误:" + e.getMessage(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                // 处理服务器响应的数据
                String responseData = response.body().string();
                LogUtil.debugInform("responseData = " + responseData);
                // TODO: 在这里处理服务器响应的数据

            }
        });


    }

(2)Post网络请求


    //post方法请求王网络
    public void postNetwork(View view) {
        //创建网络处理的对象
        OkHttpClient client = new OkHttpClient.Builder()
                .readTimeout(5, TimeUnit.SECONDS)
                .build();

        //mobile=18289454846&ver_code=123456
        //post请求来获得数据
        //创建一个RequestBody,存放重要数据的键值对
        RequestBody body = new FormBody.Builder()
                .add("mobile", "18289454846")
                .add("ver_code", "123456").build();
        //创建一个请求对象,传入URL地址和相关数据的键值对的对象
        Request request = new Request.Builder()
                .url(POST_UTL)
                .post(body).build();

        //创建一个能处理请求数据的操作类
        Call call = client.newCall(request);

        //使用异步任务的模式请求数据
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                LogUtil.error("", e);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                // 在UI线程中更新UI
                 String responseData = response.body().string();
                 LogUtil.debugInform("result = " + responseData);

            }
        });

    }


3、使用Retrofit网络框架请求网络

(1)Get网络请求

请求示例网址:
https://v0.yiketianqi.com/api?unescape=1&version=v61&appid=28392918&appsecret=No9zfo8f&adcode=440307000000

①创建请求接口对象
package com.example.networkdemo.retrofit;


import com.example.networkdemo.bean.WeatherBean;

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;

/**
 * Get请求
 * 这里使用get请求的方式请求数据
 * 并且到的是字符串数据
 */
public interface RetrofitWeatherService {
    //键值对的定义和数据的返回类型的定义这里是String
    //https://v0.yiketianqi.com/api?unescape=1&version=v61&appid=28392918&appsecret=No9zfo8f&adcode=440307000000
    //这里使用 @Field 是会报错,是要使用 @Query
    @GET("api")//get请求方式
    Call<WeatherBean> getWeather(@Query("unescape") String unescape, @Query("version") String version,
                                 @Query("appid") String appid, @Query("appsecret") String appsecret, @Query("adcode") String adcode);
}


② 具体的请求代码

比如在某个Activity写如下代码


    //get方法请求网络
    public void getNetwork(View view) {

        Retrofit retrofit = getGsonRetrofit(GET_UTL);

        RetrofitWeatherService weatherService = retrofit.create(RetrofitWeatherService.class);
        //?unescape=1&version=v61&appid=28392918&appsecret=No9zfo8f&adcode=440307000000"
        Call<WeatherBean> call = weatherService.getWeather("1", "v61", "28392918", "No9zfo8f", "440307000000");
        //转换成Call,在call对象包含Url的完整地址
        //可以看到这里使用了create的方法,里面传入了请求服务的接口类
        //并且后面接的是接口类的方法,方法里面传入Url地址要的键值对的值
        //这时call对象就有完整的Url地址,就可以请求数据了
        //使用call对象进行网络数据请求
        call.enqueue(new Callback<WeatherBean>() {
            //网络数据请求成功的回调方法
            @Override
            public void onResponse(Call<WeatherBean> call, Response<WeatherBean> response) {

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        WeatherBean bean = response.body();
                        tv_info.setText(TimeUtil.getTimeString() + " \n Get请求的数据:" + bean + "");
                        String air_tips = bean.getAir_tips();
                        String update_time = bean.getUpdate_time();
                        String tem1 = bean.getTem1();
                        String tem2 = bean.getTem2();
                        String tem = bean.getTem();
                        Toast.makeText(RetrofitNetworkActivity.this, "天气时间:" + update_time
                                + "\n 当前温度:" + tem + ",温度变化" + tem2 + "--" + tem1 +
                                "\n 温馨提示:" + air_tips, Toast.LENGTH_LONG).show();
                    }
                });
            }

            //网络数据请求失败的回调方法
            @Override
            public void onFailure(Call<WeatherBean> call, Throwable t) {
                tv_info.setText(TimeUtil.getTimeString() + " \n Get 请求的失败日志:" + t.getMessage() + "");
            }
        });

    }

(2)Post网络请求

Post请求网址:https://demo-api.apipost.cn/api/demo/login
携带信息:mobile=18289454846&ver_code=123456

①创建请求接口对象
package com.example.networkdemo.retrofit;



import com.example.networkdemo.bean.LoginBean;

import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

/**
 * 登陆服务器的请求
 * 这里使用post请求的方式请求数据
 * 并且到的是一个自定义的对象数据
 */
public interface RetrofitLoginService {
    //https://demo-api.apipost.cn/api/demo/login
    @POST("api/demo/login")//Post请求方式
    @FormUrlEncoded      //键值对的定义和数据的返回类型的定义这里是String
    Call<LoginBean> login(@Field("mobile") String mobile, @Field("ver_code") String ver_code);
}

② 具体的请求代码

    //post方法请求王网络
    public void postNetwork(View view) {
      
        Retrofit retrofit = getGsonRetrofit(POST_UTL); //https://demo-api.apipost.cn/
        RetrofitLoginService loginService = retrofit.create(RetrofitLoginService.class);
        Call<LoginBean> call = loginService.login("18289454846", "123456");
        call.enqueue(new Callback<LoginBean>() {
            @Override
            public void onResponse(Call<LoginBean> call, Response<LoginBean> response) {
                // 在UI线程中更新UI
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // 处理服务器响应的数据
                        LoginBean loginBean = response.body();
                        LogUtil.debugInform("loginBean = " + loginBean);
                        int code = loginBean.getCode();
                        LoginBean.DataBean data = loginBean.getData();
                        String msg = loginBean.getMsg();
                        Toast.makeText(RetrofitNetworkActivity.this, "登陆信息:" +
                                "\n code = " + code + ", msg = " + msg, Toast.LENGTH_LONG).show();
                        LogUtil.debugInform("data getToken = " + data.getToken());

                        // TODO: 在这里处理服务器响应的数据
                        tv_info.setText(TimeUtil.getTimeString() + " \n Post请求的数据:" + response + "");
                    }
                });
            }

            @Override
            public void onFailure(Call<LoginBean> call, Throwable t) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        tv_info.setText(TimeUtil.getTimeString() + " \n Post请求的失败日志:" + t.getMessage() + "");
                    }
                });
            }
        });
    }


    //返回一个Gson类型的对象
    public Retrofit getGsonRetrofit(String url) {
        Retrofit retrofit = new Retrofit.Builder().baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        return retrofit;
    }


    //返回一个Gson类型的字符串,
    public Retrofit getStringRetrofit(String url) {
        Retrofit retrofit = new Retrofit.Builder().baseUrl(url)
                .addConverterFactory(ScalarsConverterFactory.create())
                .build();
        return retrofit;
    }


4、使用WebView显示对应网址的网页

(1)在布局文件写入控件WebView

   <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

(2) 设置基本参数


         web_view = findViewById(R.id.web_view);
  
        WebSettings webSettings = web_view.getSettings();
        //如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式

        //要显示的网址:
        web_view.loadUrl(url); //设置网址

这里只是基本代码,还可以设置跳转监听,前进后退网页跳转等,可以自己调试研究。

三、总结

1、网络请求是要在子线程内进行

2、不同框架的网络请求根据项目具体情况使用

如果频率很多的使用网络请求,直接使用原生请求即可,不用使用网络框架。
如果使用频率很高,可以使用健全的网络框架:OkHttp/Retrofit;
OkHttp使用简单,Retrofit 使用复杂一些,但是和很多其他框架可以结合使用,比如Gson,RxJava等。

3、Android 网络编程要学习些什么

(1)网络分层和HTTP协议基本知识,比如请求报文和响应报文

虽然不一定会用到,但是也是要知道里面的知识点。

(2)Java网络编程基础,TCP/UDP 进行连接交互

可以写demo,一个作为客户端一个作为服务端,连接后进行通讯交互。

(3)Json数据转Gson对象

网络上数据请求基本都是返回json数据,使用Gson对象可以直接转换成对应的对象,使用起来比较方便。

但是也有一些网络请求返回的数据不是json数据格式,比如xml格式,或者其他特定格式。
这个就需要自己写工具类进行解析了。

(4)Android基本网络请求和基本网络框架使用

不使用网络框架请求网络和使用主流网络框架请求网络。

(5)加密算法:数据加密和解密

因为网络数据是经过加密的,所以必须要经过解密才能读取到正常数据。
算法是会使用框架就行了的,具体算法一般人写不出来!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/78983.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多维时序 | MATLAB实现WOA-CNN-BiGRU-Attention多变量时间序列预测

多维时序 | MATLAB实现WOA-CNN-BiGRU-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现WOA-CNN-BiGRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | MATLAB实现WOA-CNN-BiGRU-Attention多变量时间序列预测 1.程…

LVS负载均衡集群-NAT模式部署

集群 集群&#xff1a;将多台主机作为一个整体&#xff0c;然后对外提供相同的服务 集群使用场景&#xff1a;高并发的场景 集群的分类 1.负载均衡器集群 减少响应延迟&#xff0c;提高并发处理的能力 2&#xff0c;高可用集群 增强系统的稳定性可靠性&…

LeetCode 141.环形链表

文章目录 &#x1f4a1;题目分析&#x1f4a1;解题思路&#x1f514;接口源码&#x1f4a1;深度思考❓思考1❓思考2 题目链接&#x1f449; LeetCode 141.环形链表&#x1f448; &#x1f4a1;题目分析 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中…

Echarts地图-全国主要城市空气质量【亲测有效】

参考&#xff1a; Echarts官网实例 效果&#xff1a; 需要通过ajax的方式获取json数据: {"code":100,"msg":"处理成功&#xff01;","extend":{"items":[{"name":"三亚","value":52},{&qu…

适合程序员的DB性能测试工具 JMeter

背景 1、想要一款既要能压数到mysql&#xff0c;又要能压数到postGre&#xff0c;还要能压数到oracle的自动化工具 2、能够很容易编写insert sql&#xff08;因为需要指定表和指定字段类型压数据&#xff09;&#xff0c;然后点击运行按钮后&#xff0c;就能直接运行&#xff…

精彩回顾 | 迪捷软件出席2023ATC汽车电子与软件技术周

2023年8月18日&#xff0c;由ATC汽车技术会议主办&#xff0c;上海市集成电路行业协会支持的“2023ATC汽车电子与软件技术周”在上海市圆满落幕。迪捷软件上海参展之行圆满收官。 ▲开幕式 本次峰会汇聚了整车厂、汽车零部件集团、软硬件方案提供商、软件工具供应商、软件测试…

利用console提高写bug的效率

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 自从入坑前端后&#xff0c;日常写bug就没离开过console。 要说用得多&#xff0c;不如说是console.log用得多&#xff0c;console.warn和console.erro…

shell脚本基础

目录 前言 一、概述 &#xff08;一&#xff09;、shell脚本基础概念 &#xff08;二&#xff09;、shell的类型 二、Shell变量 &#xff08;一&#xff09;、组成 1.变量名 2.变量值 &#xff08;二&#xff09;、类型 1.系统内置变量&#xff08;环境变量&#xff09; 2.自定…

Spring-3-Spring AOP概念全面解析

今日目标 能够理解AOP的作用 能够完成AOP的入门案例 能够理解AOP的工作流程 能够说出AOP的五种通知类型 一、AOP 1 AOP简介 思考&#xff1a;什么是AOP,AOP的作用是什么&#xff1f; 1.1 AOP简介和作用【理解】 AOP(Aspect Oriented Programming)面向切面编程&#xff0c;一…

c51单片机串口通信(中断方式接收数据)(单片机--单片机通信)示例代码 附proteus图

单片机一般采用中断方式接受数据&#xff0c;这样便于及时处理 #include "reg51.h" #include "myheader.h" #define uchar unsigned char int szc[10]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int bufferc[6]{0}; int sza[6]{0x01,0x02,0x0…

接口测试及接口抓包常用测试工具和方法?

作为测试领域中不可或缺的一环&#xff0c;接口测试和抓包技术在软件开发过程中扮演着至关重要的角色。不论你是新手还是有一些经验的小伙伴&#xff0c;本篇文章都会为你详细介绍接口测试的基本概念、常用测试工具和实际操作技巧&#xff0c;让你轻松掌握这一技能。 接口测试…

MySQL之索引和事务

什么是索引索引怎么用索引的原理事务使用事务事务特性MySQL隔离级别 什么是索引 索引包含数据表所有记录的引用指针&#xff1b;你可以对某一列或者多列创建索引和指定不同的类型&#xff08;唯一索引、主键索引、普通索引等不同类型&#xff1b;他们底层实现也是不同的&#…

【SpringBoot】中的ApplicationRunner接口 和 CommandLineRunner接口

1. ApplicationRunner接口 用法&#xff1a; 类型&#xff1a; 接口 方法&#xff1a; 只定义了一个run方法 使用场景&#xff1a; springBoot项目启动时&#xff0c;若想在启动之后直接执行某一段代码&#xff0c;就可以用 ApplicationRunner这个接口&#xff0c;并实现接口…

线程池中的常见面试题

目录 1. 线程池相比于线程有什么优点 2. 线程池的参数有哪些 3. 线程工厂有什么用 4. 说一下线程的优先级 5. 说一下线程池的执行流程 6. 线程池的拒绝策略有哪些 7. 如何实现自定义拒绝策略 8. 如何判断线程池中的任务是否执行完成 1. 线程池相比于线程有什么优点 有…

Rancher管理K8S

1 介绍 Rancher是一个开源的企业级多集群Kubernetes管理平台&#xff0c;实现了Kubernetes集群在混合云本地数据中心的集中部署与管理&#xff0c;以确保集群的安全性&#xff0c;加速企业数字化转型。Rancher 1.0版本在2016年就已发布&#xff0c;时至今日&#xff0c;Ranche…

【宝藏应用】AI绘图网站

序言 这是一个通过AI模型进行绘制图片的网站。 有图有真相 这些是我在上面找的AI生成的图片&#xff0c;感觉怎么样呢&#xff1f;是不是看起来接近真人的精修图片了&#xff1f; 地址 链接: LiblibAI

sql中union all、union、intersect、minus的区别图解,测试

相关文章 sql 的 join、left join、full join的区别图解总结&#xff0c;测试&#xff0c;注意事项 1.结论示意图 对于intersect、minus&#xff0c;oracle支持&#xff0c;mysql不支持&#xff0c;可以变通&#xff08;in或exists&#xff09;实现 2.创建表和数据 -- 建表…

GPT垂直领域相关模型 现有的开源领域大模型

对于ToC端来说&#xff0c;广大群众的口味已经被ChatGPT给养叼了&#xff0c;市场基本上被ChatGPT吃的干干净净。虽然国内大厂在紧追不舍&#xff0c;但目前绝大多数都还在实行内测机制&#xff0c;大概率是不会广泛开放的&#xff08;毕竟&#xff0c;各大厂还是主盯ToB、ToG市…

FPGA芯片IO口上下拉电阻的使用

FPGA芯片IO口上下拉电阻的使用 为什么要设置上下拉电阻一、如何设置下拉电阻二、如何设置上拉电阻为什么要设置上下拉电阻 这里以高云FPGA的GW1N-UV2QN48C6/I5来举例,这个芯片的上电默认初始化阶段,引脚是弱上来模式,且模式固定不能通过软件的配置来改变。如下图所示: 上…

Git 删除 GitHub仓库的文件

新建文件夹 git bash here 在新建的文件夹里右键git bash here打开终端&#xff0c;并执行git init初始化仓库 git clone <你的地址> 找到github上要删除的仓库地址&#xff0c;并复制&#xff0c;在终端里输入git clone <你的地址> 要删除文件的库里右键git b…
最新文章