博客主页 😶
利用Android Studio开发一个APP - Part1 开屏页的制作
利用Android Studio开发一个APP - Part1 开屏页的制作

Author:

xuanSAMA

©

Wordage:

共计 9567 字

needs:

约 3 分钟

Popular:

479 ℃

Created:

目 录

从初中就开始接触编程,初中的时候就利用iapp写出过很多有意思的小软件,后面才知道iapp仅仅是偌大编程世界里小的不能再小的一个小语言罢了,现在学了JAVA的一些皮毛了,感觉可以挑战一下利用Android Studio开发一个软件了,我会从零开始开发一个小储云的APP,今天是第一天,我准备做一个启动页面~

Android Studio的环境已部署。

Android Studio中项目的结构

在研究了一上午的Android Studio后总算初步掌握了Android Studio中的各个文件夹是干嘛的了

image.png

image.png

加入一个Lottiefile文件

image.png

导入lottie包

点击 Sync Project with Gradle File

Android Studio就会自动下载依赖包

然后在res目录中新建一个raw目录

将从lottiefile上下载的特效的json拖入raw

注:raw文件中的文件名只能为小写字母,否则会报错(踩过坑)

image.png

这是我找的特效,挺配的

然后在主界面添加一个lottie的控件

            <com.airbnb.lottie.LottieAnimationView
                android:id="@+id/animation"
                android:layout_width="300dp"
                android:layout_height="300dp"
                app:lottie_autoPlay="true"
                app:lottie_loop="true"
                app:lottie_rawRes="@raw/data"/>
<!--               rawres这里填特效文件的名字就行了 -->

控件的使用和布局

之前玩过IAPP所以对Android的开发还是有些经验的,线性布局这些感觉用起来还是很顺手的,于是很容易的就写出一个开屏页面的

image.png

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:id="@+id/theScreenBack"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/color"
            android:gravity="center"
            android:orientation="vertical">
            <ImageView
                android:id="@+id/Logo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/shop" />
            <TextView
                android:id="@+id/shopName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/white"
                android:text="@string/app_name"
                android:textStyle="bold"
                android:textSize="50sp"/>
            <com.airbnb.lottie.LottieAnimationView
                android:id="@+id/animation"
                android:layout_width="300dp"
                android:layout_height="300dp"
                app:lottie_autoPlay="true"
                app:lottie_loop="true"
                app:lottie_rawRes="@raw/data"/>
<!--               rawres这里填特效文件的名字就行了 -->

        </LinearLayout>
    </LinearLayout>

</FrameLayout>

事件的编写

下面就是写逻辑代码的时候了,我准备用一个网页端来控制APP中的公告和验证APP是否被篡改,我现在还没学过javaweb就只有用php暂时来写网页端,而且现在还是初期,主要是为了学软件开发,所以PHP就写得简单点。

<?php
$website1 = $_GET["website"];
// 后端以后再做
// 数据库我也没建
// 先直接用个判断来获取数据
if ($website1 == "0001") {
    // code...
    $data = array('siteName' => '流光商城','version' => '1.0',"appbc" => "这是APP公告~后面会用", "background" => "http://url");
    $info = array('status' => '0','data' => $data);
    echo json_encode($info);
}
?>

JAVA的json还没有接触过,所以在网上学习了下,发现导入一个阿里的json工具包就可以进行一些基础的json操作了和导入lottie的包一样,在Gradle中插入一行 implementation 'com.alibaba:fastjson:1.2.59'然后就可以使用了。

然后又发现一个很重要的问题,我JAVA的IO流也没学过,所以就在网上找了个HTTPRequest的工具类,代码如下

package com.lg.shoptest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

public class HttpRequest {
    /**
     * 向指定URL发送GET方法的请求
     *
     * @param url
     *            发送请求的URL
     * @param param
     *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return URL 所代表远程资源的响应结果
     */
    public static String sendGet(String url, String param) {
        String result = "";
        BufferedReader in = null;
        try {
            String urlNameString = url + "?" + param;
            URL realUrl = new URL(urlNameString);
            // 打开和URL之间的连接
            URLConnection connection = realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立实际的连接
            connection.connect();
            // 获取所有响应头字段
            Map<String, List<String>> map = connection.getHeaderFields();
            // 遍历所有的响应头字段
            for (String key : map.keySet()) {
                System.out.println(key + "--->" + map.get(key));
            }
            // 定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送GET请求出现异常!" + e);
            e.printStackTrace();
        }
        // 使用finally块来关闭输入流
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 向指定 URL 发送POST方法的请求
     *
     * @param url
     *            发送请求的 URL
     * @param param
     *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return 所代表远程资源的响应结果
     */
    public static String sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!"+e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return result;
    }
}

但是我在运行后发现http请求都是失败,就发现了一个很坑的东西,那就是软件联网需要权限

image.png

这两行都得加到AndroidManifest.xml,上面的就是申请网络权限,下面那个为什么要True由网上得来的信息如下

android:usesCleartextTraffic 指示应用程序是否打算使用明文网络流量,例如明文HTTP。目标API级别为27或更低的应用程序的默认值为“ true”。面向API级别28或更高级别的应用默认为“ false”。

写过IAPP的就知道要发送HTTP请求的话就得新建一个线程,正好前几天刚刚好学习了线程,恰好可以用得上。

        new Thread(new Runnable() { // 匿名类的Runnable接口
            @Override
            public void run() {
                String test = HttpRequest.sendGet("http://blog.ooxuan.com/app.php","website=" + getString(R.string.app_id));
                JSONObject data = JSONObject.parseObject(test);
                JSONObject theData = JSONObject.parseObject(data.getString("data"));
                Log.v("调试信息", data.getString("status"));
                if (data.getString("status").equals("0")) {
                    Log.v("调试信息", "Internet connection success");
                    if (theData.getString("siteName").equals(getString(R.string.app_name))){
                        Log.v("调试信息", "app name verification succeeded");
                    }else{
                        Log.v("调试信息", "app名字不匹配!");
                    }
                }else {
                    Log.v("调试信息", "网络连接失败,请检查网络是否异常!");
                }
            }
        }).start();

这是一个多线程的匿名方法,也是之前没学过的,今天见到感觉很神奇,好了,开屏页就很不错的实现了个人感觉还是不错的~

文章二维码
利用Android Studio开发一个APP - Part1 开屏页的制作
共计 0 条评论,点此发表评论
博客主页 流光博客 欢迎来到我的博客,我会在这里分享我的学习笔记,纪录一些生活。 51统计
萌ICP备20220869号 本站已运行 1 年 99 天 15 小时 30 分 自豪地使用 Typecho 建站,并搭配 MyDiary 主题 Copyright © 2022 ~ 2024. 流光博客 All rights reserved.
打赏图
打赏博主
欢迎
搜 索
足 迹
分 类
  • 📚 学习生涯
  • 📔 日常纪录
  • 🖥️ 软件分享
  • 🗂️ 杂项
  • 🖼️ 相册