zoukankan      html  css  js  c++  java
  • 课程设计报告

    Android新闻APP的设计与开发

    一、需求分析

    1.1项目概述

    我做的新闻APP是基于Eclipse安卓开发系统的一款可以查看,添加和删除关注新闻的一款安卓APP,它拥有注册界面,可根据提示注册新用户,点击确定之后会跳转到登录界面并将用户名传到登录界面上,在输入正确的密码后进入新闻界面,可以查看新闻,在查看时可以在查看新闻中点击加关注,添加到关注页面,其中用到了SQList数据库。

    1.2用例分析

     

    (1) 用例名称:注册页面

    执行者是用户

    说明:用户注册一个账号

    (2) 用例名称:登录页面

    执行者是用户

    说明:用户登录成功

    请求结果是跳转到新闻主页

    (3) 用例名称:新闻主页

    执行者是用户

    说明:显示新闻列表

    请求结果是进入新闻详情页面

    (4) 用例名称:详情页面

    执行者是用户

    说明:一条新闻的详细信息

    请求结果可以是加入关注

     

    (5) 用例名称:关注页面

    执行者是用户

    说明:查看关注的新闻

    请求结果是清除关注的新闻

    1.3数据库设计

    字段名

    数据类型

    长度

    主键

    索引

    外键

    自增

    说明

    _id

    Integer

     

     

    数据的id属性

    text

    Varchar

    80

     

    新闻的标题

    image

    Integer

    50

     

    新闻的图片

     

     

     

    二、系统设计

    2.1注册页面

     

    功能:通过对输入的用户名和密码进行判断,直到满足条件注册成功。成功后通过 DataFile.saveUserInfo();将注册的用户名存储到DataFile.txt文件中,以键值对的形式存储。再利用if语句对输入的字符串进行判断,满足条件后存到响应的txt文件中。

     

     

     

    2.2登录页面

     

    功能:注册时将用户名和密码以键值对的形式存到了DataFile.txt中,通过Map<String, String> userInfo = DataFile.getUserInfo(this);

    userInfo.get("username");

    userInfo.get("password");

    获取到用户名和密码,与登录页面填写的进行比较,一致则进入到新闻主页面。

    2.3新闻主页

    功能:在主页可以通过listview列表查看新闻的要闻,点击列表中的某一项新闻进入该新闻的详情页,其中难点是listview的点击事件:

    onItemClick(AdapterView<?> parent, View view, int position,long id)

    通过重写这个方法来实现该功能,position表示列表的索引,从0开始,0表示第一列,listview中的内容需要建个类并继承BaseAdapter中的方法。将新闻写入列表中。

    2.4新闻详情页

    功能:主要是在点击列表进入某一特定新闻是跳转的页面,它展现的是新闻的详细内容,包括图片,出处和具体内容。其中有加入关注按钮,点击按钮就可以将该新闻加入到SQList数据库中,保存到我们建的数据表中,有具体的标题和相关的图片,标题是正常存储,而图片需要将它转换为字节流再进行存储到相应的数据表中,之后统一在关注页面查询。

    2.5关注页面

    功能:它展现的是加入关注的新闻,也就是在详情页添加到数据库中的数据,通过查看到数据库表和SQLiteDatabase db = helper.getReadableDatabase();语句对数据库的操作,下方加入清除按钮,可以将加入到数据库中的数据清空,通过db.delete("information", null, null);语句完成对数据库的操作。

     

    三、系统测试

    3.1注册页面测试

    注册页面需要输入用户名和密码,还需要再次确认密码,用户名要求是2-14位的字符,密码是4-16位的字母和数字组成且数字不能是第一位,输入确认的密码必须与密码输入一致。

     

    3.2登录页面测试

    用户名在注册后自动获取到的,密码不能为空且与之前输入的密码一致,才可以进入新闻主页

     

    3.3主页面测试

    主页面主要展示新闻列表,实现listview的点击事件

     

    3.4新闻详情页面测试

    显示主要内容,标题和图片,加入关注按钮的成功使用。

     

    3.5关注页面测试

    它展现关注的新闻标题和图片,在数据库中获取到数据并展现到列表中。清空按钮的成功使用,在没有内容时候的提示弹窗。

     

    四、系统实现

    4.1 注册页面的实现

    String s = yhm.getText().toString();// 输入的用户名和密码的规则
            String b = mm.getText().toString();
            String a = nmm.getText().toString();
            boolean isSaveSuccess = DataFile.saveUserInfo(this, s, b);
            if (!s.equals("") && !b.equals("") && !a.equals("")) {
                if (s.length() <= 16 && s.length() >= 2) {
                    if (b.length() >= 4 && b.length() <= 14) {
                        if (a.equals(b)) {
                            if (isSaveSuccess) {
                                Toast.makeText(this, "保存成功", 0).show();
                            } else {
                                Toast.makeText(this, "保存失败", 0).show();
                            }
                            Intent intent = new Intent(this, MainActivity.class);
                            startActivity(intent);
                        } else {
                            Toast.makeText(this, "两次密码不一致", 0).show();
                        }
                    } else {
                        Toast.makeText(this, "密码长度为4到14位", 0).show();
                    }
                } else {
                    Toast.makeText(this, "用户名过长或过短", 0).show();
                }
            } else {
                Toast.makeText(this, "用户名或密码不能为空", 0).show();
            }

    4.2 登录页面的实现

    public void denglu(View veiw) {// 判断是否登录
            Map<String, String> userInfo = DataFile.getUserInfo(this);
            if (userInfo != null) {
                    if (!mm.getText().toString().equals("")) {
                    if (userInfo.get("password").equals(mm.getText().toString())) {
                        Intent intent = new Intent(MainActivity.this,
                                HomePage.class);
                        startActivity(intent);
                    } else {
                        Toast.makeText(this, "密码输入错误", 0).show();
                    }
                } else {
                    Toast.makeText(this, "请输入密码", 0).show();
                }
            }
    }
    // 注册完之后将用户名写到登录页面
            Map<String, String> userInfo = DataFile.getUserInfo(this);
            if (userInfo != null) {
                yhm.setText(userInfo.get("account"));
            

    4.3 新闻主页的实现

    public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {// listview的点击事件
            switch (position) {
            case 0:
                Intent intent0 = new Intent(HomePage.this, Details.class);
                startActivity(intent0);
                break;
            default:
                break;
            }
    }
    class MyBaseAdapter extends BaseAdapter {// listview添加内容
            @Override
            public int getCount() {
                return Names.length;
            }
            @Override
            public Object getItem(int position) {
                return Names[position];
            }
            @Override
            public long getItemId(int position) {
                return position;
            }
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View view = View.inflate(HomePage.this, R.layout.news, null);
                TextView tv = (TextView) view.findViewById(R.id.jianjie);
                ImageView iv = (ImageView) view.findViewById(R.id.tupian);
                tv.setText(Names[position]);
                iv.setBackgroundResource(tps[position]);
                return view;
            }
    
        }

    4.4 详情页面的实现

    // 关注按钮
        public void guanzhu(View v) {
            tv1 = (TextView) findViewById(R.id.textView1);
            String s = tv1.getText().toString();
            insert(s, R.id.logo); // insert方法
            Toast.makeText(this, "成功关注", 0).show();
    }
    // 数据添加到数据库
        public void insert(String text, Integer it) {
            MyHelper helper = new MyHelper(this, "xinwen", null, 1);
            SQLiteDatabase db = helper.getWritableDatabase();
            ContentValues values = new ContentValues();
            values.put("text", text);
            values.put("image", it);
            long id = db.insert("information", null, values);
            db.close();
    }

    4.5 关注页面的实现

    // 查询数据
            MyHelper helper = new MyHelper(this, "xinwen", null, 1);
            SQLiteDatabase db = helper.getReadableDatabase();
            Cursor cursor = db.query("information", null, null, null, null, null,
                    null);
            if (cursor.getCount() != 0) {
                gztv = (TextView) findViewById(R.id.gz_nr);
                lv = (ImageView) findViewById(R.id.gz_tp);
                cursor.moveToFirst();
                gztv.setText(cursor.getString(cursor.getColumnIndex("text")));
                gztv.append("/n" + cursor.getColumnIndex("text"));
                lv.setBackgroundResource(R.drawable.f);
    // 清除按钮
        public void clear(View v) {
            // 删除数据
            MyHelper helper = new MyHelper(this, "xinwen", null, 1);
            SQLiteDatabase db = helper.getWritableDatabase();
            Cursor cursor = db.query("information", null, null, null, null, null,null);
            if (cursor.getCount() != 0) {
                int number = db.delete("information", null, null);
                gztv.setText("");
                lv.setBackgroundColor(0);
                db.close();
            } else {
                Toast.makeText(this, "您还没有关注", 0).show();
            }
    }

    五、心得体会

     刚开始做课设的时候,是一头雾水,虽然我要设计的app不是很复杂,但是面临的问题还是很多的,给一直很自信的我也带来了压力。开始就做好了挑灯夜战的准备,并给自己做了各方面的计划。开始从网上了解需要的知识,不断的学习,慢慢的开始进入了状态。在做新闻APP期间问题很多。面对这些问题我就心里想一定要解决这些问题,把成果拿出来。对于当时遇到的问题,我都认真分析了一篇,针对某个问题,我都自己预定出一个解决方案,对于遇到问题根本没有人帮你,所以我遇到的问题几乎都是在网上找的答案。主要是解决问题的能力,遇到问题要分析清楚试图找到最优的解决方案。

    通过这次的Android课程设计让我更加了解Android开发,了解它的结构、语法和相关知识。让我更加自主的去完成任务,在面临问题的时候去网上寻找答案,我一般遇到问题就会在网上搜答案,一般对于我喜欢在博客和相关技术论坛上搜,当然有时间也在国外的网站随便看看。搜问题其实也讲究方法,对于搜索其实也算是一种经验。

  • 相关阅读:
    C# 自定义文件图标 双击启动 (修改注册表)
    C/S打包 客户端/windows程序 InstallShield
    WPF 依赖属性
    WPF 自定义Expander
    WPF DevExpress ChartControl用法
    WPF 水平进度条
    WPF 自定义CheckBox
    WPF 自定义ListBox
    WPF 绕圈进度条(一)
    1.为什么要用泛型
  • 原文地址:https://www.cnblogs.com/zwcg/p/11995393.html
Copyright © 2011-2022 走看看