首页 > 其他分享 >第五周周一(安卓端连接服务端)

第五周周一(安卓端连接服务端)

时间:2024-03-25 20:34:27浏览次数:23  
标签:String void 第五 安卓端 new import message public 服务端

学会了安卓连接服务端的方法,使用OKhttp3

服务端代码:

package com.example.okhttp3;

import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.fasterxml.jackson.databind.ObjectMapper;

@WebServlet("/api/hello")
public class HelloServlet extends HttpServlet {

    private final ObjectMapper objectMapper = new ObjectMapper();

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        try {
            System.out.println("已连接");


             // 获取客户端的基本信息
             String clientAddress = request.getRemoteAddr();
             String requestMethod = request.getMethod();
             String requestURI = request.getRequestURI();

             // 打印访问信息到控制台
             System.out.println("Client Address: " + clientAddress);
             System.out.println("Request Method: " + requestMethod);
             System.out.println("Request URI: " + requestURI);


            String useSSL = request.getParameter("useSSL");
            String message;

            if (useSSL != null && useSSL.equals("true")) {
                message = "Hello, this is an API endpoint with SSL enabled!";
            } else {
                message = "Hello, this is an API endpoint with SSL disabled!";
            }

            // 构造一个包含 message 的 JSON 响应
            String jsonResponse = objectMapper.writeValueAsString(new ApiResponse(message));

            response.setContentType("application/json");
            response.getWriter().println(jsonResponse);
        } catch (Exception e) {

            e.printStackTrace();
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }
    }

    // 响应数据的 POJO 类
    private static class ApiResponse {
        private final String message;

        public ApiResponse(String message) {
            this.message = message;
        }

        public String getMessage() {
            return message;
        }
    }
}

安卓端代码:

package com.example.okhttp3;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.google.gson.Gson;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    private OkHttpClient client = new OkHttpClient();
    private TextView textView;

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 关联布局文件中的 TextView
        textView = findViewById(R.id.textView);

        // 创建一个请求
        Request request = new Request.Builder()
                .url("http://192.168.227.177:8080/api/hello?useSSL=true")
                .build();

        // 发起异步请求
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d("连接", "连接失败");
                // 处理连接失败的情况
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.d("连接", "连接成功");
                // 处理连接成功的情况
                if (response.isSuccessful()) {
                    // 从响应中获取数据
                    String responseData = response.body().string();
                    // 解析JSON数据并更新UI
                    updateUIWithResponse(responseData);
                } else {
                    // 处理响应失败的情况
                    updateUIWithError();
                }
            }
        });
    }

    // 更新UI显示响应数据
    private void updateUIWithResponse(final String responseData) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // 使用 Gson 解析 JSON 数据为 ApiResponse 对象
                Gson gson = new Gson();
                ApiResponse apiResponse = gson.fromJson(responseData, ApiResponse.class);
                // 设置 TextView 显示解析后的消息
                textView.setText(apiResponse.getMessage());
            }
        });
    }

    // 更新UI显示连接失败消息
    private void updateUIWithError() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // 设置 TextView 显示连接失败消息
                textView.setText("连接失败");
            }
        });
    }
}

 

标签:String,void,第五,安卓端,new,import,message,public,服务端
From: https://www.cnblogs.com/atrue/p/18095254

相关文章

  • 极光推送服务端
    使用极光推送能够实现app的消息推送,需要将JPushAndroidSDK集成到app里,JPushAndroidSDK创建到JPushCloud的长连接,为App提供长期在线的能力。当开发者想要及时地推送消息到达App时,只需要调用JPushAPI推送,或者使用其他方便的智能推送工具,即可轻松与用户交流。......
  • C++第五十六篇——VC获取显示器状态(捕获熄屏/亮屏)
    参考链接:https://blog.csdn.net/rocklee/article/details/76636253此篇文章实现C++可以获取屏幕亮灭的消息,程序在后台运行,不会有控制台窗口显示。第一步:新建一个控制台程序 第二步:编写屏幕亮灭的代码ScreenTest.cpp#include<windows.h>#include<iostream>usingname......
  • 代码随想录算法训练营第五十七/天 | 516. 最长回文子序列,647. 回文子串
     动态规划最强总结篇!如今动态规划已经讲解了42道经典题目,共50篇文章,是时候做一篇总结了。关于动态规划,在专题第一篇关于动态规划,你该了解这些! (opensnewwindow)就说了动规五部曲,而且强调了五部对解动规题目至关重要!这是Carl做过一百多道动规题目总结出来的经验结晶啊......
  • 代码随想录算法训练营第五十五天 | 583. 两个字符串的删除操作, 72. 编辑距离
    72.编辑距离 已解答中等 相关标签相关企业 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符 示例1:输入:word1="horse"......
  • 爬虫工作量由小到大的思维转变---<第五十四章 Scrapy 降维挖掘---中间件系列(3)>
    前言:继续上一章:https://hsnd-91.blog.csdn.net/article/details/136977606本章主要介绍:UrlLengthMiddleware和DepthMiddleware是Scrapy框架中的关键Spider中间件,自此,爬虫中间件部分,一共5个算是全部介绍完毕!UrlLengthMiddleware的功能主要是设置和限制请求的URL长度......
  • 爬虫工作量由小到大的思维转变---<第五十五章 Scrapy 降维挖掘---中间件系列(4)>
    前言:爬虫中间件的文章:https://hsnd-91.blog.csdn.net/article/details/136977606https://hsnd-91.blog.csdn.net/article/details/136978069讲完了爬虫中间件(5个),现在就应该归类到下载中间件(11个)!下载器中间件的作用和重要性        下载器中间件是Scrapy......
  • 第五期充电桩运维管理系统需要哪些必备功能?
    上一期我们说了充电桩管理系统需要哪些技术要求。这一期我们来说说系统还需要哪些必备的功能,这样才能让运营者更好的管理整个项目!(1)业务管理:针对充电桩站点的管理与运营需求,设计有丰富的功能,包括站场管理、用户管理、营销、运维、车辆、消息通知、数据统计、订单与财务等多个......
  • Qt6.0开发 第五章 模型-视图结构
    第五章模型-视图结构模型-视图结构概述模型-视图结构是一种将数据存储和界面分离的编程方法.模型存储数据,视图组件显示模型中的数据,在视图组件里修改的数据会被自动保存到模型里.GUI程序的主要功能是可由用户在界面上编辑和修改数据,典型的如数据库应用程序.在数据库应用程......
  • 黑马Java0基础课程学习记录第五天(p49-p53)-3.23
    day05-循环高级训练+leecode练习1.无限循环2.条件控制语句breakcontinuecontinue:不能单独存在的,只能存在于循环当中。表示:跳过本次循环,继续执行下次循环。eg:break:不能单独存在的。可以用在switch和循环中,表示结束,跳出的意思。eg:练习1:逢7过游戏:从1-100打印......
  • 爬虫工作量由小到大的思维转变---<第五十一章 Scrapy 深入理解Scrapy爬虫引擎(2)--引擎
    前言:继续上一篇:https://hsnd-91.blog.csdn.net/article/details/136943552        本章主要介绍Scrapy引擎的启动流程、请求处理的生命周期、如何处理下载的内容以及触发ItemPipeline的过程。还讨论了数据处理在爬虫解析函数和ItemPipeline中的作用,并介绍了引擎......