原生Android开发基础项目结构介绍

  • 1.软件整体结构
  • 2.具体的页面书写
  • 3.实例分析
  • 4.后续

    下面先来总结一下软件的基本目录结构,这一般是开发的关键,只有明白了软件的目录结构,才能更加可灵活的设计软件。关注过我的人应该都知道,我主要是走的前端方向,然后摸一摸基础的后端,盘一盘网安,偶尔为自己的软件接口抓个包什么的。因此下面的介绍会通过与前端的对比来总结。

1.软件整体结构


(1)权限设置:

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

最常规的比如上面的网络权限设置和文件读写权限等,具体需要的权限可以根据实际开发需要去查找就行;
(2)软件基本配置:

 <applicationandroid:allowBackup="true"android:icon="@drawable/campus_notice"android:label="@string/app_name"android:networkSecurityConfig="@xml/network_security_config"android:requestLegacyExternalStorage="true"android:roundIcon="@drawable/campus_notice"android:supportsRtl="true"android:theme="@style/Theme.MqttLedMenu"></application>

解释:上面的@引入的资源其实就在drawablevalues目录下,

说明一下network_security_config,因为Android默认只能使用https访问,但是由于项目调试以及部分接口不是安全协议,因此可能需要用到。具体内容如下(通过xml引入),详细了解可以浏览(Android网络安全之NetworkSecurityConfig):

<?xml version="1.0" encoding="utf-8"?>
<network-security-config xmlns:android="http://schemas.android.com/apk/res/android"><base-config cleartextTrafficPermitted="true" />
</network-security-config>

2.具体的页面书写

    接下来以MainActivity页面为例,注意这里的名字是默认的,也建议采用这个,类似于微信小程序里面的index,不叫index也可以,只是大家习惯这么命名

    对于页面的XML文件的功能按钮做一下说明:

3.实例分析

    以登录页面的为例,补充,写入了LoginActivity页面,要想在页面中具体使用,需要在AndroidManifest.xml中做如下注册:

<activityandroid:name=".LoginActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><!--intent-filter部分其实就表示默认展示页面-->
</activity>

分析如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"android:background="@drawable/background"android:orientation="vertical"android:padding="30dp"tools:context=".LoginActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="160dp"android:orientation="vertical"><TextViewandroid:layout_width="60dp"android:layout_height="wrap_content"android:text="用户名:"android:textFontWeight="@integer/material_motion_duration_long_2" /><EditTextandroid:id="@+id/username"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入用户名~"android:textFontWeight="@integer/material_motion_duration_medium_1" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="密码:"android:textFontWeight="@integer/material_motion_duration_long_2" /><EditTextandroid:id="@+id/password"android:layout_width="823dp"android:layout_height="wrap_content"android:hint="请输入登录密码~"android:password="true"<!--开启密码显示-->android:textFontWeight="@integer/material_motion_duration_medium_1"tools:ignore="Deprecated" /></LinearLayout><LinearLayout<!--emm,这里的布局被误调了,尴尬,不建议这么书写-->android:layout_width="800dp"android:layout_height="88dp"android:orientation="horizontal"><CheckBoxandroid:id="@+id/isRemember"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="记住密码"></CheckBox><TextViewandroid:id="@+id/isForget"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="40dp"android:text="忘记密码?" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="30dp"><Buttonandroid:id="@+id/login"android:layout_width="100dp"android:layout_height="wrap_content"android:layout_weight="1"android:background="@color/btn"android:padding="10dp"android:text="登录" /></LinearLayout></LinearLayout>

对应的逻辑代码如下:

package com.example.mqttledmenu;
//导入部分我给省了,如果报错就直接alt+enter导入就行
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {private EditText username;private EditText password;private CheckBox isRemember;private TextView isForget;private Button login;private SharedPreferences sp;//利用SharedPreferences存储用户密码实现自动登录功能@Overrideprotected void onCreate(Bundle savedInstanceState) {//初始化UI绑定,相当于html最原始的document的getElementByIdsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_login);username = findViewById(R.id.username);password = findViewById(R.id.password);login = findViewById(R.id.login);isRemember = findViewById(R.id.isRemember);isForget = findViewById(R.id.isForget);//绑定点击事件,这里因为implements(实现)了View.OnClickListener接口,因此//可以实现对绑定时间的集体封装,最后利用switch case便于统一管理点击事件。 login.setOnClickListener(this);isRemember.setOnClickListener(this);isForget.setOnClickListener(this);//检测密码信息sp = getSharedPreferences("config", Context.MODE_PRIVATE);Boolean autoLogin = sp.getBoolean("remember", false);if (autoLogin) {username.setText(sp.getString("username", ""));password.setText(sp.getString("password", ""));isRemember.setChecked(true);} else {isRemember.setChecked(false);}}//集中管理点击事件@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.login:String usernameStr = username.getText().toString();String passwordStr = password.getText().toString();if (usernameStr.equals("") || passwordStr.equals("")) {Toast.makeText(this, "用户名和密码不能为空!", Toast.LENGTH_SHORT).show();} else {//登录请求的逻辑,稍后新开一个文章详细解释,基础不好的先可以跳过Retrofit retrofit = new Retrofit.Builder().baseUrl(Config.serverUrl).build();UploadService uploadService = retrofit.create(UploadService.class);Call<ResponseBody> call = uploadService.login(usernameStr, passwordStr);call.enqueue(new Callback<ResponseBody>() {@Overridepublic void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {String result = null;try {result = response.body().string();JsonObject returnData = new JsonParser().parse(result).getAsJsonObject();if (!returnData.get("code").toString().equals("200")) {Toast.makeText(LoginActivity.this, "用户名或密码错误~", Toast.LENGTH_SHORT).show();return;}JsonObject temp = new JsonParser().parse(returnData.get("data").toString()).getAsJsonObject();Config.getInstance().setUserId(temp.get("userId").toString());//存储用户的idConfig.getInstance().setUserAvatar(temp.get("userAvatar").toString());//存储用户的头像if (isRemember.isChecked()) {//存储用户用户名和密码SharedPreferences.Editor edit = sp.edit();edit.putString("username", usernameStr);edit.putString("password", passwordStr);edit.putBoolean("remember", true);edit.apply();}//页面跳转逻辑Intent intent = new Intent();//设置不能返回上一页,其实就是清空(clear)了页面栈intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);//第一个参数:当前页面(getApplicationContext能够自动获取当前页面)//第二个参数:想要跳转的页面intent.setClass(getApplicationContext(), MainActivity.class);startActivity(intent);} catch (IOException e) {Toast.makeText(LoginActivity.this, "服务端异常~", Toast.LENGTH_SHORT).show();e.printStackTrace();}}@Overridepublic void onFailure(Call<ResponseBody> call, Throwable t) {}});}break;case R.id.isForget:Toast.makeText(this, "请联系辅导员重置密码哦!", Toast.LENGTH_SHORT).show();break;}}
}

4.后续

    由于时间比较紧,可能写的相对粗糙,如果有什么不懂的可以在评论区提出来,我会根据时间尽快安排新的文章,喜欢的话可以点个赞支持一下呀!。

原生Android开发基础项目结构介绍相关推荐

  1. AngularJS+Ionic开发-2.项目结构介绍

    使用上篇博客<开发环境搭建>中的命令创建完成IonicHelloWorld项目,在VSCode中的左侧,显示该项目的结构信息,如下图所示: 1 .sourcesmaps文件夹 调试状态的j ...

  2. .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI

    作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...

  3. vue-cli构建SPA项目结构介绍spa完成路由开发及嵌套路由

    目录 一.vue-cli构建SPA项目结构介绍 二.spa完成路由开发 三. 嵌套路由 一.vue-cli构建SPA项目结构介绍 前提:搭建好NodeJS环境    node -v    npm -v ...

  4. 2017-2018-2 20165236 实验四《Android开发基础》实验报告

    2017-2018-2 20165236 实验四<Android开发基础>实验报告 一.实验报告封面 课程:Java程序设计       班级:1652班       姓名:郭金涛     ...

  5. 六十一、分析Springboot中的项目结构介绍

    @Author:Runsen 来源:尚硅谷 下面建议读者学习尚硅谷的B站的SpringBoot视频,我是学雷丰阳视频入门的. 具体链接如下:B站尚硅谷SpringBoot教程 文章目录 spring项 ...

  6. 2018-2019-2-20175225 实验四《Android开发基础》实验报告

    一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:张元瑞 学号:20175225 指导教师:娄嘉鹏 实验日期:2019年5月14日 实验时间:13:45 - 21:00 实验序号:实验 ...

  7. 实验四android开发基础

    实验四android开发基础 提交点一 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd) ...

  8. 20175208 张家华 实验四《Android开发基础》实验报告

    一.实验报告封面 课程:Java程序设计        班级:1752班          姓名:张家华        学号:20175208 指导教师:娄嘉鹏 实验日期:2019年5月16日 实验时 ...

  9. python在线投票系统讲解_Python开发基础-项目实训-在线投票系统ppt课件

    <Python开发基础-项目实训-在线投票系统ppt课件>由会员分享,可在线阅读,更多相关<Python开发基础-项目实训-在线投票系统ppt课件(27页珍藏版)>请在人人文库 ...

最新文章

  1. springmvc常用注解标签详解
  2. 安装ssr_12月23日先锋首测启动,累计登录3天必得SSR!
  3. 【知识图谱系列】人工智能经典图谱有哪些?
  4. ASP.NET2.0中用ICallbackEventHandler实现客户端与服务器端异步交互
  5. JavaScript闭包的底层运行机制
  6. 2.5 Hive中外部表的讲解
  7. 简单了解RestTemplate消息读取的转化
  8. git merge用法_常用命令之git操作(进阶篇)
  9. 从0到上线一个完整Java项目,需要具备哪些技能?
  10. 重大调整!余承东兼任华为云与计算 BG 总裁
  11. JVM 排查问题实战
  12. String 创建对象问题
  13. STL 关联容器的lower_bound()和upper_bound()
  14. MIMO系统获取复用增益
  15. 深度学习之VGG19模型简介
  16. kitti数据集calib.txt文件
  17. AI识别彻底懵逼!这到底是「牛」还是「鲨」?
  18. 玩转NVIDIA Jetson AGX Xavier--- 中文用户手册
  19. 蚂蚁金服区块链朱永春:蚂蚁金服业务新思路,用以往通用场景结合出新的解决方案...
  20. 2021-12-23 网工基础(十四) 链路聚合的两种模式、堆叠、集群、IP路由基础

热门文章

  1. 常用php类库、资源
  2. 通过pandas查找股市交易日和节假日日期
  3. T1191,T1142,T1312,T1957
  4. Qt软件发布(版本信息,Release版程序,代码打包,制作安装包)
  5. 当前就业最好的20所大学(附 各个学校的最容易就业的专业)
  6. UC/OS的46个系统函数1
  7. Modernizr.js简介
  8. 迅雷资源服务器IP地址列表
  9. 结合SNS和WEB2.0 爱情公寓探索新模式
  10. 想问关于未来编程学习方向以及职业规划【新人】