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的更多相关文章

  1. 初识安卓小程序(Android电话拨号器)

    首先,先创建一个安卓项目(我的版本号是4.4.2的),名字为"电话拨号器",创建的时候点击"clipart",如图: 然后在res目录下找到layout目录,找 ...

  2. 初识安卓小程序(Android短信发送器)

    首先,先创建一个安卓项目(我的版本号是4.4.2的),名字为"短信发送器" 然后在res目录下找到layout目录,找到activity_main.xml或fragment_mai ...

  3. 安卓小程序的一次bug调试,报错:java.lang.NullPointerException,logcat学习

    做实验的时候,调试了很久后模拟器执行后,app还是会崩溃并停止运行,错误如下. 因为初学,所以也不知道怎么使用调试工具,也不懂看日志,经过学习后尝试这查看了LogCat日志上面有这样的提示: 其中引起 ...

  4. 体验报告:微信小程序在安卓机和苹果机上的区别

    很多人可能会问:微信小程序和在微信里面浏览一个网页有什么区别? 首先,小程序的运行是全屏的,界面跟进入了一个APP很像,更为沉浸跟在微信里面访问h5不一样:其次,它的浏览体验更为稳定. 不过,这还不够 ...

  5. 体验了微信小程序,发现安卓用户终于把果粉“碾压”了一次

    今天早上,张小龙在微信公开课上分享了小程序的理念,并且公布了小程序将于1月9日上线. 为了体现张小龙对未来程序形态的理解,小程序有四个特定:无需安装.触手可及.用完即走.无需卸载.今天,36氪刚好有机 ...

  6. 微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决

    微信小程序上传图片的时候,如果是多图片上传,一般都是直接用一个循环进行wx.uploadFile 这个在电脑上面测试与苹果手机上面都不会有什么问题 但当用安卓测试的时候,你会发现小程序会提示一个the ...

  7. 微信小程序之wx.request:fail错误,真机预览请求无效问题解决,安卓,ios网络预览异常

    新版开发者工具增加了https检查功能:可使用此功能直接检查排查ssl协议版本问题: 可能原因:0:后台域名没有配置0.1:域名不支持https1:没有重启工具:2:域名没有备案,或是备案后不足24小 ...

  8. 微信小程序开发——苹果手机领取卡券出现参数错误(安卓正常)

    异常描述: 微信小程序领取卡券,调用 wx.addCard 接口,安卓手机正常调起领取卡券界面,苹果手机.微信开发者工具中均出现“参数错误”,如图: 异常解析: 安卓手机能正常调起领取界面,那就说明领 ...

  9. 微信小程序、安卓APP、苹果APP对比分析

    今天的话题主要是关于微信小程序.安卓APP.苹果APP对比分析.既然是对比分析肯定是将它们一个一个说明. 本篇不涉及技术话题,只讲解微信小程序.安卓APP.苹果APP它们各自的优缺点及其应用场景. 一 ...

随机推荐

  1. 小程序运行报错:errMsg: "request:fail url not in domain list"

    错误原因: 报错提示说请求的url不在域名列表里,应该是还没有配置服务器域名 解决方法: 可点击开发者工具右上角 详情-项目设置-不校验合法域名.web-view(业务域名).TLS 版本以及 HTT ...

  2. Memory Layout for Multiple and Virtual Inheritance

    Memory Layout for Multiple and Virtual Inheritance(By Edsko de Vries, January 2006)Warning. This art ...

  3. 解决类似umount target is busy挂载盘卸载不掉问题

    问题描述: Linux下挂载后的分区或者磁盘某些时候需要umount的时候出现类似“umount: /mnt: target is busy.”等字样,或者“umount: /xxx: device ...

  4. Ubuntu最常见的包问题

    工作环境换成Ubuntu18.04小记:https://www.cnblogs.com/dunitian/p/9773214.html Ubuntu不得不说的就是这个apt出问题的处理 :(换源就不说 ...

  5. 洛谷 P1411 树

    最近在做些树形DP练练手 原题链接 大意就是给你一棵树,你可以断开任意数量的边,使得剩下的联通块大小乘积最大. 样例 8 1 2 1 3 2 4 2 5 3 6 3 7 6 8 输出 18 我首先想的 ...

  6. CMDB资产管理系统开发【day25】:需求分析

    本节内容 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT基础架构库(Information Technology Infra ...

  7. MySQL学习笔记(六)MySQL8.0 配置笔记

    今天把数据库配置文件修改了,结果重启不了了 需要使用 mysqld --initialize 或 mysqld --initialize-insecure 命令来初始化数据库 1.mysqld --i ...

  8. C语言运算符优先级总结

    一 写在开头1.1 本文内容本文内容为C语言中运算符优先级的总结.转载于:https://blog.csdn.net/huangblog/article/details/8271791,感谢原作者的付 ...

  9. js中escape对应的C#解码函数 UrlDecode

    js中escape对应的C#解码函数 System.Web.HttpUtility.UrlDecode(s),使用过程中有以下几点需要注意   js中escape对应的C#解码函数 System.We ...

  10. Leetcode#70. Climbing Stairs(爬楼梯)

    题目描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解 ...