20172328 暑假作业 之 实现安卓小程序Enjoy-all
20172328 暑假作业 之 实现安卓小程序Enjoy-all
项目介绍
- 项目名称:
- Enjoy - all
- 项目简介:
- 本项目基于Java语言和Anroid Studio软件,实现了简单的冒泡、屏幕布局设计、多层次结构和一些实用功能。
- 使用说明:
- 使用本款app,可以使用日记本功能、账目计算功能以及打卡计划提醒功能,能使用户更好的管理时间。
需求分析
实现日账管家功能:
- 日账管家是一个能够计算每日花销并根据用户设定的额度来反馈是否花销合理的一个功能。
实现抒写心情功能:
- 抒写心情板块是实现了一个记事本的功能,主要可以去记录一些语句或者添加一些便签。
实现生活计划功能:
- 在生活计划方面,做了一个闹钟的功能,能够对自己写的打卡计划进行提醒。
自己设计了该应用程序的图标。

改了布局文件中的一些属性来保持界面干净美观。
相关过程及解释
- 该款App一共包含7个活动。下面来依次介绍:
- MainActivity

该活动是本App进入后的第一个界面,界面主要是大致的介绍和一个跳转按钮。
- SecondActivity

该活动是承接MainActivity活动的第二个界面,这个界面上半部分是对该APP功能的一个简单说明。下方是具体三个板块——红笺小字,抒写心情▶、日账管家▶、生活计划▶。这三个板块分别在该活动上体现为一个按钮,通过选择可以进入不同的功能界面。
- Second1Activity和AddNoteActivity
- 这两个活动构成了第一个板块的功能,即抒写心情功能。
- AddNoteActivity
public class AddNoteActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_note);
}
public void cancel(View view) {
finish();
}
public void addNote(View view) {
String fileName = ((EditText)
findViewById(R.id.noteTitle))
.getText().toString();
String body = ((EditText) findViewById(R.id.noteBody))
.getText().toString();
File parent = getFilesDir();
File file = new File(parent, fileName);
PrintWriter writer = null;
try {
writer = new PrintWriter(file);
writer.write(body);
finish();
} catch (Exception e) {
showAlertDialog("Error adding note", e.getMessage());
} finally {
if (writer != null) {
try {
writer.close();
} catch (Exception e) {
}
}
}
}
private void showAlertDialog(String title, String message) {
AlertDialog alertDialog = new
AlertDialog.Builder(this).create();
alertDialog.setTitle(title);
alertDialog.setMessage(message);
alertDialog.show();
}
}
- Second1Activity
public class Second1Activity extends Activity {
private String selectedItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second1);
ListView listView = (ListView) findViewById(R.id.listView1);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView,
View view, int position, long id) {
readNote(position);
}
});
}
@Override
public void onResume() {
super.onResume();
refreshList();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_add:
startActivity(new Intent(this,
AddNoteActivity.class));
return true;
case R.id.action_delete:
deleteNote();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void refreshList() {
ListView listView = (ListView) findViewById(
R.id.listView1);
String[] titles = fileList();
ArrayAdapter<String> arrayAdapter =
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_activated_1,
titles);
listView.setAdapter(arrayAdapter);
}
private void readNote(int position) {
String[] titles = fileList();
if (titles.length > position) {
selectedItem = titles[position];
File dir = getFilesDir();
File file = new File(dir, selectedItem);
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try {
fileReader = new FileReader(file);
bufferedReader = new BufferedReader(fileReader);
StringBuilder sb = new StringBuilder();
String line = bufferedReader.readLine();
while (line != null) {
sb.append(line);
line = bufferedReader.readLine();
}
((TextView) findViewById(R.id.textView1)).
setText(sb.toString());
} catch (IOException e) {
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
}
}
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
}
}
}
}
}
private void deleteNote() {
if (selectedItem != null) {
deleteFile(selectedItem);
selectedItem = null;
((TextView) findViewById(R.id.textView1)).setText("");
refreshList();
}
}
}
Second1Activity活动使用一个ListView,它列出了系统中所有备忘的标题。Add启动ADDNoteActivity活动,Delete删除所选的备忘。



- Second2Activity
- 该板块实现了计算用户每日花销并根据用户设定的额度来反馈是否花销合理。在该板块我学着去读取用户输入的字符,然后将其转化成字符串类型,再强制转换成Double类型,再进行求和;然后用if语句做一个比较,弹出气泡来反馈用户。
value1 = Double.parseDouble(etvalue1.getText().toString());
value2 = Double.parseDouble(etvalue2.getText().toString());
value3 = Double.parseDouble(etvalue3.getText().toString());
value4 = Double.parseDouble(etvalue4.getText().toString());
value5 = Double.parseDouble(etvalue5.getText().toString());
value6 = Double.parseDouble(budget.getText().toString());
result = value1+ value2 + value3 + value4 + value5;
textView.setText("" + result + "");
if(result > value6) {
Toast.makeText(Second2Activity.this, "花销已超出预算,请注意开支!(;′⌒`)", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(Second2Activity.this, "花销合理有余,请继续保持哦。(* ̄︶ ̄)", Toast.LENGTH_LONG).show();
}


- Second3Activity
- 在这一板块实现了闹钟的功能,能够对自己写的打卡计划进行提醒。
public class Second3Activity extends Activity {
private EditText period;
private int value;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second3);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(
MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void setAlarm(View view) {
period = (EditText)findViewById(R.id.editText16);
value = Integer.parseInt(period.getText().toString());
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR, value);
Date hoursLater = calendar.getTime();
Toast.makeText(this, "The alarm will set off at " +
hoursLater, Toast.LENGTH_LONG).show();
AlarmManager alarmMgr = (AlarmManager) getSystemService(
Context.ALARM_SERVICE);
Intent intent = new Intent(this, WakeUpActivity.class);
PendingIntent sender = PendingIntent.getActivity(
this, 0, intent, 0);
alarmMgr.set(AlarmManager.RTC_WAKEUP,
hoursLater.getTime(), sender);
}
}
该类中的setAlarm方法创建了一个Date实例,指向从现在开始的某一段时间,然后创建了一个PendingIntent封装了一个意图,该意图将会启动WakeUpActivity活动。然后,它访问了AlarmManager,并且通过传递时间和PendingIntent来设置了一个闹钟。


制作感想
- 虽然还是没有好好利用暑假时间静下心来做些东西,实际上展示出来的这个小型app很粗糙,但通过体验过程,学到了不少东西。
- 在学习书上的一些内容的时候,自己也学着去做了一些改变和拓展,这次暑假的APP就到这里结束了,还有有关数据库的内容可以在本学期的项目实践中去接触学习一下。
源码地址分享
参考资料
- 《Java与Android开发学习指南》
20172328 暑假作业 之 实现安卓小程序Enjoy-all的更多相关文章
- 初识安卓小程序(Android电话拨号器)
首先,先创建一个安卓项目(我的版本号是4.4.2的),名字为"电话拨号器",创建的时候点击"clipart",如图: 然后在res目录下找到layout目录,找 ...
- 初识安卓小程序(Android短信发送器)
首先,先创建一个安卓项目(我的版本号是4.4.2的),名字为"短信发送器" 然后在res目录下找到layout目录,找到activity_main.xml或fragment_mai ...
- 安卓小程序的一次bug调试,报错:java.lang.NullPointerException,logcat学习
做实验的时候,调试了很久后模拟器执行后,app还是会崩溃并停止运行,错误如下. 因为初学,所以也不知道怎么使用调试工具,也不懂看日志,经过学习后尝试这查看了LogCat日志上面有这样的提示: 其中引起 ...
- 体验报告:微信小程序在安卓机和苹果机上的区别
很多人可能会问:微信小程序和在微信里面浏览一个网页有什么区别? 首先,小程序的运行是全屏的,界面跟进入了一个APP很像,更为沉浸跟在微信里面访问h5不一样:其次,它的浏览体验更为稳定. 不过,这还不够 ...
- 体验了微信小程序,发现安卓用户终于把果粉“碾压”了一次
今天早上,张小龙在微信公开课上分享了小程序的理念,并且公布了小程序将于1月9日上线. 为了体现张小龙对未来程序形态的理解,小程序有四个特定:无需安装.触手可及.用完即走.无需卸载.今天,36氪刚好有机 ...
- 微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
微信小程序上传图片的时候,如果是多图片上传,一般都是直接用一个循环进行wx.uploadFile 这个在电脑上面测试与苹果手机上面都不会有什么问题 但当用安卓测试的时候,你会发现小程序会提示一个the ...
- 微信小程序之wx.request:fail错误,真机预览请求无效问题解决,安卓,ios网络预览异常
新版开发者工具增加了https检查功能:可使用此功能直接检查排查ssl协议版本问题: 可能原因:0:后台域名没有配置0.1:域名不支持https1:没有重启工具:2:域名没有备案,或是备案后不足24小 ...
- 微信小程序开发——苹果手机领取卡券出现参数错误(安卓正常)
异常描述: 微信小程序领取卡券,调用 wx.addCard 接口,安卓手机正常调起领取卡券界面,苹果手机.微信开发者工具中均出现“参数错误”,如图: 异常解析: 安卓手机能正常调起领取界面,那就说明领 ...
- 微信小程序、安卓APP、苹果APP对比分析
今天的话题主要是关于微信小程序.安卓APP.苹果APP对比分析.既然是对比分析肯定是将它们一个一个说明. 本篇不涉及技术话题,只讲解微信小程序.安卓APP.苹果APP它们各自的优缺点及其应用场景. 一 ...
随机推荐
- [NOI2018]屠龙勇士
题目描述 题解 考虑增量法. 假设我们已经做完了前k个条件,前面的模数连乘起来的结果为M,答案为X,当前的攻击力为x,龙的血量为a. 那么我们这一次的答案的表达形式是X+t*M的. 这一次需要满足的是 ...
- git的git bash使用
一.git配置 在你使用git之前,需要先进行配置,即要报名号,否则不能提交代码 $ git config --global user.name # 你是谁 $ git config --global ...
- python Django cookie和session
在一个会话的多个请求中共享数据,这就是会话跟踪技术.例如在一个会话中的请求如下: 请求银行主页: 请求登录(请求参数是用户名和密码): 请求转账(请求参数与转账相关的数据): 请求信誉卡还款(请求参 ...
- nodejs和npm的关系【转】
node.js是javascript的一种运行环境,是对Google V8引擎进行的封装.是一个服务器端的javascript的解释器. 包含关系: nodejs中含有npm,比如说你安装好nodej ...
- springboot2 pagehelper 使用笔记
作者:cnJun 博客专栏: https://www.cnblogs.com/cnJun/ pom.xml <parent> <groupId>org.springframew ...
- Python 字节流写入文件
用struct模块 三个函数 pack().unpack().calcsize() # 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) pack(fmt, v1, v2 ...
- react实战项目开发(2) react几个重要概念以及JSX语法
前言 前面我们已经学习了利用官方脚手架搭建一套可以应用在生产环境下的React开发环境.那么今天这篇文章主要先了解几个react重要的概念,以及讲解本文的重要知识JSX语法 React重要概念 [思想 ...
- [再寄小读者之数学篇](2014-06-22 求导数 [中国科学技术大学2014年高等数学B考研试题])
设 $f(x)=x^2\ln(x+1)$, 求 $f^{(n)}(0)$. 解答: 利用 Leibniz 公式易知 $f'(0)=f''(0)=0$, $f^{(n)}(0)=(-1)^{n-3} n ...
- 给一个Unix域套接字bind一个路径名
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <strings.h& ...
- [译]Ocelot - Routing
原文 Ocelot主要的功能就是将http请求转发到对应的下游服务上去. Ocelot将一个请求路由到另外一个路由的动作叫做ReRoute.为了能让Ocelot能正常工作,需要在配置中设置ReRout ...