课程设计报告

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

原文地址:https://www.cnblogs.com/zwcg/p/11995393.html