Android期末项目 新闻APP的设计与实现

这篇具有很好参考价值的文章主要介绍了Android期末项目 新闻APP的设计与实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 项目基本信息

1.1 项目名称

好好学习新闻APP的设计与实现

1.2 开发运行环境

Android Studio 2022

Android SDK 7.0

SQLite 5.4.1

Gradle 7.5

JDK 1.8.0

虚拟机 Pixel 2 API 30 2

1.3 使用的核心类及组件

Activity:Android系统中的四大组件之一,它是一种应用程序组件,用于提供用户交互界面和对用户输入的处理,每个Activity都会占用一个窗口来展示它的界面。

AppCompatActivity:支持Fragment的管理和兼容,在处理多个Fragment时,可以方便地使用FragmentTransaction等API进行管理和切换。

ViewPager:是Android中的一个控件,它是一个可以滑动切换子视图的容器,通常用于实现Tab切换、引导页面和轮播图等。

ListView:通过使用Adapter机制来绑定数据和视图,Adapter需要提供数据和视图,并根据数据创建对应的视图展示在ListView中。

Fragment:它可以让开发者在一个Activity中管理多个界面片段,使得界面的组合更加灵活。这些Fragment可以被添加到或移除出Activity中,而不影响其他Fragment以及整个Activity。

SQLiteOpenHelper:封装了SQLite数据库的一些底层操作,可以更加便捷地进行数据的存储和查询。同时,该类还提供了一些常用的API,如insert()、update()、delete()和query()等方法,分别用于执行插入、更新、删除和查询等数据操作。

2 项目需求分析

2.1 APP前台部分

(1)用户登录:如果用户想查看“好好学习新闻APP”的内容,首先必须使用账号和密码进行登录,也可点击记住密码,账号密码验证成功后可进入访问。

(2)用户注册:如果用户没有账号和密码,可以点击注册通过注册获取账号和密码,输入想要注册的账号和密码同意协议后点击注册可完成注册。

(3)用户浏览:用户通过账号密码登录成功后可以浏览新闻,用户可以选择推荐、要闻、思想、综合模块进行新闻浏览。

(4)用户查看:用户通过选择推荐、要闻、思想、综合这四个模块进行新闻查看,若遇到感兴趣的标题可以点进去查看全文。

3 项目开发过程

3.1 APP功能模块

3.1.1 用户登录功能:用户通过账号密码登录成功后可以进入系统内访问或者阅读当前新闻内容。

3.1.2 用户注册功能:如果用户没有访问该系统的权限,可以通过注册功能注册用户账号密码,注册成功后跳转登陆页面。

3.1.3页面浏览功能:用户注册并登录成功后,可以进入系统浏览推荐、要闻、思想、综合这四个新闻页面。

3.1.4 新闻查看功能:如果用户发现非常感兴趣的新闻标题或图片,可以点击该新闻进入详情页面进行阅读。

APP功能模块图

安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他

3.2 数据库设计

本APP在设计数据库时需要使用User表来实现。

用户表

字段

数据类型

主键

外键

是否为空

说明

Uid

char(32)

用户Id

Account

varchar(50)

用户账号

Pass

varchar(50)

用户密码

安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他

用户表实体图

3.3具体实现

3.1.1 用户登录功能:用户通过账号密码登录成功后可以进入系统内访问或者阅读当前新闻内容,如果用户经常忘记密码也可以点击记住密码选项。用户若没有账号密码可以点击右下角“还没有账号”跳转注册页面进行注册。

安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他

部分代码:

public class LoginActivity extends AppCompatActivity {
    private Button btnLogin;
    private EditText etAccount, etPassword;
    private TextView toReg;
    private CheckBox cb_Remember;
    private MySQLiteOpenHelper mySQLiteOpenHelper;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        initView();
        initData();
        //设置点击监听按钮
        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String account = etAccount.getText().toString();
                String password = etPassword.getText().toString();
                List<User> userList =  mySQLiteOpenHelper.selectByAccountAndPass(account,password);
                System.out.println(userList);
                if(!userList.isEmpty()){  //说明查到了
                    Toast.makeText(LoginActivity.this,"登录成功!",Toast.LENGTH_LONG).show();
                    if(cb_Remember.isChecked()){
                        SharedPreferences spf = getSharedPreferences("spfRecorid",MODE_PRIVATE);
                        SharedPreferences.Editor edit = spf.edit();
                        edit.putString("account", account);
                        edit.putString("password",password);
                        edit.putBoolean("isRemember",true);
                        edit.apply();
                    }else{
                        SharedPreferences spf = getSharedPreferences("spfRecorid",MODE_PRIVATE);
                        SharedPreferences.Editor edit = spf.edit();
                        edit.putBoolean("isRemember",false);
                        edit.apply();
                    }
                    Intent intent = new Intent(LoginActivity.this,FragmentMain.class);
                    startActivity(intent);
                }else{
                    Toast.makeText(LoginActivity.this,"账号或密码错误!",Toast.LENGTH_LONG).show();
                }
            }
        });
        toReg = findViewById(R.id.toReg);
        toReg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(LoginActivity.this,RegisterActivity.class);
                startActivity(intent);
            }
        });
    }
    private void initView(){
        btnLogin = findViewById(R.id.btn_login);
        etAccount = findViewById(R.id.et_account);
        etPassword = findViewById(R.id.et_password);
        mySQLiteOpenHelper = new MySQLiteOpenHelper(this);
        cb_Remember = findViewById(R.id.cb_Remember);
    }
    //    记住密码初始化功能
    private void initData(){
        SharedPreferences spf = getSharedPreferences("spfRecorid",MODE_PRIVATE);
        boolean isRem = spf.getBoolean("isRemember",false);
        String account = spf.getString("account","");
        String password = spf.getString("password","");
        if(isRem){
            etAccount.setText(account);
            etPassword.setText(password);
            cb_Remember.setChecked(true);
        }
    }
}

3.1.2 用户注册功能:如果用户没有访问该系统的权限,可以通过注册功能注册用户账号密码,用户通过输入需要注册的账号密码并点击同意协议便可完成注册,注册成功后跳转登陆页面。若用户有账号和密码可以点击“已有账号”跳转登录页面进行登录。

安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他 安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他

部分代码:

public class RegisterActivity extends AppCompatActivity implements View.OnClickListener{
    private EditText etAccount, etPass, etPassConfirm;
    private Button btnRegister, button2;
    private CheckBox cbAgree;
    private MySQLiteOpenHelper mySQLiteOpenHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
//        返回登录页面
        button2 = (Button) findViewById(R.id.button2);
        etAccount = findViewById(R.id.et_account1);
        etPass = findViewById(R.id.et_password1);
        etPassConfirm = findViewById(R.id.et_password_confirm);
        btnRegister = findViewById(R.id.btn_register);
        cbAgree = findViewById(R.id.cb_Agree);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Intent intent = new Intent(MainActivity.this,DetailActivity.class);
                Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
                startActivity(intent);
            }
        });
//        第二种方式写监听事件
        btnRegister.setOnClickListener(this);
    }
    @Override
    public void onClick(View view) {
        String account = etAccount.getText().toString().trim();
        String pass = etPass.getText().toString().trim();
        String passConfirm = etPassConfirm.getText().toString();
//        TextUtils.isEmpty()  和   name.isEmpty()   的区别
//        第一个可以判断 NULL 和 “”  两种为空的情况,且均判断为空
//        第二个只能判断“”这一种情况,如果为NULL则会报空指针异常。
        if(TextUtils.isEmpty(account)){
            Toast.makeText(RegisterActivity.this,"用户名不能为空", Toast.LENGTH_LONG).show();
            return;
        }
        mySQLiteOpenHelper = new MySQLiteOpenHelper(this);
//        查询这个账号是否已经被注册
        List<User> userList = mySQLiteOpenHelper.selectByAccount(account);
        if(!userList.isEmpty()){  //说明已经被注册过了
            Toast.makeText(RegisterActivity.this,"该账号已经被注册!",Toast.LENGTH_LONG).show();
            return;
        }
        if(TextUtils.isEmpty(pass)){
            Toast.makeText(RegisterActivity.this,"密码不能为空",Toast.LENGTH_LONG).show();
            return;
        }
        if(!TextUtils.equals(pass,passConfirm)){
            Toast.makeText(RegisterActivity.this,"两次密码不一致",Toast.LENGTH_LONG).show();
            return;
        }
        if(!cbAgree.isChecked()){
            Toast.makeText(RegisterActivity.this,"请同意用户协议",Toast.LENGTH_LONG).show();
            return;
        }
        User user = new User();
        user.setAccount(account);
        user.setPass(pass);
        //插入数据到数据库中
        mySQLiteOpenHelper = new MySQLiteOpenHelper(this);
        long rowId = mySQLiteOpenHelper.insertData(user);
        if(rowId != -1){
            ToastUtil.toastShort(this,"注册成功");
            Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
            startActivity(intent);
        }else {
            ToastUtil.toastShort(this,"注册失败");
        }
    }
}

3.1.3 页面浏览功能:用户注册并登录成功后,可以进入系统浏览推荐、要闻、思想、综合这四个新闻页面。用户可以根据个人兴趣进行选择。

安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他

安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他 安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他

部分代码:

public class FragmentMain extends AppCompatActivity {
    ViewPager viewPager;
    List<Fragment> viewList;
    TextView tuijian, yaowen, sixiang, zonghe;
    List<String> titlelist;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragmentmian);
        viewPager = findViewById(R.id.viewpager);
        tuijian = findViewById(R.id.tuijian);
        yaowen = findViewById(R.id.yaowen);
        sixiang = findViewById(R.id.sixiang);
        zonghe = findViewById(R.id.zonghe);
        MyLister lister = new MyLister();
        tuijian.setOnClickListener(lister);
        yaowen.setOnClickListener(lister);
        sixiang.setOnClickListener(lister);
        zonghe.setOnClickListener(lister);
        viewList = new ArrayList<>();
//        View view1 = View.inflate(this, R.layout.fragment01, null);
//        View view2 = View.inflate(this, R.layout.fragment02, null);
//        View view3 = View.inflate(this, R.layout.fragment03, null);
//        View view4 = View.inflate(this, R.layout.fragment04, null);

        titlelist=new ArrayList<>();
        titlelist.add("推荐");
        titlelist.add("要闻");
        titlelist.add("思想");
        titlelist.add("综合");
//        viewList.add(view1);
//        viewList.add(view2);
//        viewList.add(view3);
//        viewList.add(view4);
        viewList.add(new Fragment01());
        viewList.add(new Fragment02());
        viewList.add(new Fragment03());
        viewList.add(new Fragment04());
        //FragPageAdapter pageAdapter = new FragPageAdapter(viewList,titlelist);
        FragmentManager manager=getSupportFragmentManager();
        viewPager.setAdapter(new FragfragAdapter(manager,viewList,titlelist));
    class MyLister implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.tuijian:
                    viewPager.setCurrentItem(0);
                    break;
                case R.id.yaowen:
                    viewPager.setCurrentItem(1);
                    break;
                case R.id.sixiang:
                    viewPager.setCurrentItem(2);
                    break;
                case R.id.zonghe:
                    viewPager.setCurrentItem(3);
                    break;
            }
        }
    }
}

3.1.4 新闻查看功能:用户登录成功后通过浏览推荐、要闻、思想、综合这四个新闻页面,如果发现非常感兴趣的新闻标题或图片,可以点击该新闻进入详情页面进行阅读。

安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他 

安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他安卓新闻app开发实例,Android移动应用开发,android,android studio,高级组件,期末项目,其他 

部分代码:

public class Fragment01 extends Fragment {
    private ListView Lv = null;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        //解析碎片对应的布局文件
        View view= inflater.inflate(R.layout.fragment01,container,false);
//        return view;
        Lv = view.findViewById(R.id.Lv);
        final String[] name = new String[] { "******" };
        final String[] message = new String[] {
                "******",
                "******",
                "******",
                "******",
                "******"};
        final int[] photo = new int[] { R.drawable.tuijian02, R.drawable.tuijian03, R.drawable.yaowen01 ,R.drawable.sixiang01, R.drawable.zonghe01};
        List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
        Map<String, Object> map1 = new HashMap<String, Object>();
        map1.put("photo", R.drawable.tuijian02);
        map1.put("name", name[0]);
        data.add(map1);
        Map<String, Object> map2 = new HashMap<String, Object>();
        map2.put("photo", R.drawable.tuijian03);
        map2.put("name", name[1]);
        data.add(map2);
        Map<String, Object> map3 = new HashMap<String, Object>();
        map3.put("photo", R.drawable.yaowen01);
        map3.put("name", name[2]);
        data.add(map3);
        Map<String, Object> map4 = new HashMap<String, Object>();
        map4.put("photo", R.drawable.sixiang01);
        map4.put("name", name[3]);
        data.add(map4);
        Map<String, Object> map5 = new HashMap<String, Object>();
        map5.put("photo", R.drawable.zonghe01);
        map5.put("name", name[4]);
        data.add(map5);
        System.out.println(data);
        Lv.setAdapter(new SimpleAdapter(getActivity(),
                data,
                R.layout.item,
                new String[] { "photo", "name" },
                new int[] { R.id.iv,R.id.tv_name }));
        Lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
                Bundle bundle = new Bundle();
                bundle.putInt("photo", photo[arg2]);
                bundle.putString("message", message[arg2]);
                Intent intent = new Intent();
                intent.putExtras(bundle);
                intent.setClass(getActivity(), NewsTuijian.class);
                Log.i("message", message[arg2]);
                getActivity().startActivity(intent);
//                startActivity(intent);
            }
        });
        return view;
    }
}

4 项目总结及心得

通过这次学习,我了解到Activity作为Android开发系统中的四大组件之一,它的功能非常强大,用于提供用户交互界面和对用户输入的处理,每个Activity都会占用一个窗口来展示它的界面。以及AppCompatActivity支持Fragment的管理和兼容,在处理多个Fragment时,可以方便地使用进行管理和切换,使得界面的组合更加灵活。

个人设计是最容易提升自身代码水平的,通过这次设计,我深刻的认识到学习新技术和工具是必须的,Android生态系统每年都在迅速发展和壮大,新技术和工具不断涌现,作为学生我们需要保持持续学习,跟上技术发展的步伐。另外好的代码设计和架构对于项目成功至关重要:良好的代码设计和架构可以提高代码质量,同时还有助于提高应用的性能和稳定性。

注:由于源码量过多,需要的朋友可在资源中下载,也可私信我拿取!  文章来源地址https://www.toymoban.com/news/detail-754739.html

到了这里,关于Android期末项目 新闻APP的设计与实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于安卓系统(android)记事本APP管理系统设计与实现

    目录 摘要 I Abstract II 1 绪论 1.1 课题来源、目的和意义 1 1.2 国内外基本研究情况 1 2 需求分析 2.1 用户需求 4 2.2 功能需求 4 2.3 数据库选择 6 2.4 性能需求 6 3 概要设计 3.1 功能概要设计 7 3.2 数据库概要设计 13 4 详细设计 4.1 功能设计 15 4.2 数据库设计 30 5 系统功能实现 5.1 系统架

    2024年02月11日
    浏览(42)
  • 【Android Studio】安卓APP期末作品记录之连接sqlite数据库以及简单的sqlite增删改查

    期末作品要求使用数据库,我自己折腾了一会,又看了很多博主发的文章,终于成功了,特此记录:使用SQLiteDatabase和SQLiteOpenHelper连接已有sqlite数据库。 第一步,导入sqlite数据库 因为我已经创建好了一个sqlite数据库,所以第一步得将我的数据库导入项目中 在app — src — ma

    2024年02月03日
    浏览(57)
  • Android安卓实战项目(2)---健身UI APP(源码在文末)

    1.大致浏览 2.功能介绍 (1)功能一 第一个界面点击后可以弹出图像,如图: (2)功能二 界面二的控件可以通过滑动下拉条来调解 MainActivity.java PopupActivity.java FitnessMove.java 链接:https://pan.baidu.com/s/1fE-Koh-VmnFOxNKF9CsQNA?pwd=jynl 提取码:jynl 有开发需求私信作者 15135757306

    2024年02月15日
    浏览(45)
  • Android安卓实战项目(5)---完整的健身APP基于安卓(源码在文末)可用于比赛项目或者作业参考中

    1.大致浏览 【bilibili视频】 https://www.bilibili.com/video/BV1uX4y177iR/?share_source=copy_webvd_source=b2e9b9ed746acda34f499009647748ed (1)开机动画 (2)App介绍 (3)身体指标填写 (4)体脂计算 (5)主页功能介绍 (1)主项目实现 这段代码是一个名为 MainActivity 的 Android 活动(Activity)类。分析

    2024年02月10日
    浏览(48)
  • 0003Java安卓程序设计-springboot基于Android的学习生活交流APP

    编程技术交流、源码分享、模板分享、网课教程 🐧裙:776871563 网络的广泛应用给生活带来了十分的便利。所以把学习生活交流管理与现在网络相结合,利用java技术建设学习生活交流APP,实现学习生活交流的信息化。则对于进一步提高学习生活交流管理发展,丰富学习生活交

    2024年02月05日
    浏览(49)
  • 安卓期末大作业-记账app(含源码+导出app+运行截图)附下载链接

    开发软件:Android Studio 开发语言:Java 2023年上半年移动开发期末大作业记账app,老师给了95分,可以记录各种类型的账目支出记录,收入记录,存储到数据库中,可以隐藏账目记录,可以记录和删除记录,还可以将收支记录转图表分析,也可清空所有数据。具体如下图所示:

    2024年02月04日
    浏览(54)
  • 基于安卓/android/微信小程序的学生考勤签到APP-#计算机毕业设计

    目前高校大学生上课考勤管理都是任课老师上课点名,然后用纸质版考勤表来记录学生上课出勤情况,学期末再根据所有上课出勤表及作业登记表对学生平时成绩打分,最后把出勤数据整理上交到各院系,而学生请假是以传统的写请假条的形式来向辅导员请假。 这种模式在目

    2024年02月10日
    浏览(47)
  • 安卓期末大作业——鲜花商店APP(源码+任务书)

    安卓期末大作业——鲜花商店APP(源码+任务书) 《移动应用开发》 课程考核报告 姓    名: 学    号: 完 成 日 期 20 22 年 5 月 建议从以下方面填写:1. 课题的作用和意义  2.课题综述  3.完成思路与方法  4.软件设计流程图(图示说明系统) 5. 课程设计的收获格式(宋

    2024年02月05日
    浏览(56)
  • Android实现App内自动升级,适配了安卓7、8及以上版本

            应用发布后,要实现灰度升级控制,如果只依赖各家应用市场是不够的,还需要自己在应用中控制升级逻辑。并且每家应用市场上新审核也是一件很麻烦的事情,尤其像至简网格这样的应用,甚至没在应用市场上架,更不可能依赖它们了。所以必须要在应用中实现自

    2024年02月10日
    浏览(70)
  • Android安卓实战项目(12)—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】生活助手类APP(源码在文末)

    B站演示 【Android安卓实战项目(12)—生活助手类APP—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】】 https://www.bilibili.com/video/BV1Wu4y1C76j/?share_source=copy_webvd_source=b2e9b9ed746acda34f499009647748ed 这段代码是一个Android应用程序的主要活动(Activity),它是一

    2024年02月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包