




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实 验 报 告课程名称 移动应用开发_实验项目 单词本实现 实验仪器 _系 别 专 业 班级/学号 学生姓名 实验日期 _成 绩 _ 指导教师 _一、 实验目的1. 了解Android数据存储的基本概念;2. 理解并掌握SQLite数据库的使用方法;3. 进一步熟悉与掌握Fragment使用。4. 进一步熟悉各组件、适配器、菜单、对话框等相关概念和技术等。5. 掌握ContentProvider相关概念和技术。6. 掌握Handler相关概念和技术。二、 实验要求1. 课前预习实验内容,并查找相关资料。2. 按照实验步骤完成各个相关内容。3. 撰写实验报告。a) 实验报告格式必须符合学校要求(例如必须采用学校规定的实验封面);b) 写出实验详细步骤,包括主要采用的技术方案、相关分析和核心代码。注意:不要简单地近包括截屏和代码,完整代码可以作为附录放在实验报告结尾;c) 总结实验中遇到的问题、分析和解决方法。d) 写出心得体会与收获等。三、 实验内容1. 文件构成:1) Java文件:对应功能:2) 资源文件包括:Asset下的本地词库文件背景定义文件各个Activity和Fragment的Layout对话框界面各个List的Item定义不同的菜单文件数组、边界值、颜色值等2. 功能实现分析:主界面:侧滑:主界面采用三个Fragment利用FragmentManager进行切换管理,默认的单词本Fragment是一个经过扩展的RecyclerView,可以实现左滑删除编辑,并且通过对Adapter的修改可以实现隐藏解释达到背单词的效果,也可以通过对数据加载的管理实现按字母或者按新旧排序。搜索Fragment:在App第一次进入时会对本地的txt进行加载,并放到Sqlite数据库中,在获取搜索的关键字后对数据库进行搜索并返回给ListView,点击ListViewde的item后根据单词链接有道API进行查询,并返回其读音和解释,点击添加则可以添加到单词列表。翻译Fragment:翻译功能利用有道Api提供的翻译接口进行翻译,可以实现中文和任意语言的互相转化。新闻名言打开今日一句和BBC新闻今日一句和BBC新闻两个都是获取Json解析得到,并放入对应的数据中。3. 核心代码:1) 修改对话框:private void InsertDialog() final TableLayout tableLayout = (TableLayout) getActivity().getLayoutInflater().inflate(R.layout.insert, null); new AlertDialog.Builder(context) .setTitle(新增单词)/标题 .setView(tableLayout)/设置视图 /确定按钮及其动作 .setPositiveButton(确定, new DialogInterface.OnClickListener() Override public void onClick(DialogInterface dialogInterface, int i) String strWord = (EditText) tableLayout.findViewById(R.id.txtWord).getText().toString(); String strMeaning = (EditText) tableLayout.findViewById(R.id.txtMeaning).getText().toString(); /既可以使用Sql语句插入,也可以使用使用insert方法插入 operate.Insert(strWord, strMeaning); refreshList(); ) /取消按钮及其动作 .setNegativeButton(取消, new DialogInterface.OnClickListener() Override public void onClick(DialogInterface dialogInterface, int i) ) .create()/创建对话框 .show();/显示对话框2) Frgament切换:private void setSelect(int i) clearImageView(); manager = getSupportFragmentManager(); transaction = manager.beginTransaction(); hideFragment(transaction); switch (i) case 0: System.out.println(search pressed); search.setImageResource(R.mipmap.search_button_pressed); if(search_fragment = null) search_fragment = new SearchWord(); transaction.add(R.id.fragment_ui, search_fragment); else transaction.show(search_fragment); break; case 1: System.out.println(list pressed); main.setImageResource(R.mipmap.list_button_pressed); if(main_fragment = null) main_fragment = new WordList(); transaction.add(R.id.fragment_ui, main_fragment); else transaction.show(main_fragment); break; case 2: System.out.println(book pressed); settings.setImageResource(R.mipmap.book_pressed); if(setting_fragment = null) setting_fragment = new TranslateFragment(); transaction.add(R.id.fragment_ui, setting_fragment); else transaction.show(setting_fragment); break; default: break; mit();private void hideFragment(FragmentTransaction transaction2) / TODO Auto-generated method stub if(search_fragment != null) transaction2.hide(search_fragment); if(main_fragment != null) transaction2.hide(main_fragment); if(setting_fragment != null) transaction2.hide(setting_fragment); 3) JSON解析:JSONObject object = new JSONObject(String.valueOf(jsonText);JSONArray rootArray = (JSONArray) object.get(data);for(int i = 0; i 7; i+) News news = new News(); JSONObject now = rootArray.getJSONObject(i); news.setTime(now.getString(publishDateStr); news.setContent(now.getString(content); news.setUrl(now.getString(url); news.setTitle(now.getString(title); if(now.getString(imageUrls) != null) JSONArray picarray = now.getJSONArray(imageUrls); List piclist = new ArrayList(); for (int j = 0; j 1; j+) String pic = (String) picarray.get(j); String b = http:/ichef.bbci.co.uk/news/500/; pic = b + pic.substring(50, pic.length(); piclist.add(pic); news.setPic_s(String) picarray.get(0); news.setPics_url(piclist); System.out.println(第+i+条新闻: +news.getTitle(); list.add(news);4) 获取JSON字符串:Thread thread = new Thread(new Runnable() Override public void run() BufferedReader reader = null; StringBuffer sbf = new StringBuffer(); try SSLContext context = SSLContext.getInstance(SSL); TrustManager trustManager = new myX509TrustManager(); context.init(null, trustManager, new SecureRandom(); SSLSocketFactory ssf = context.getSocketFactory(); URL url = new URL(String.valueOf(urlstring); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.setHostnameVerifier(new TrustAnyHostNameVerifier(); connection.setSSLSocketFactory(ssf); connection.setRequestMethod(GET); connection.connect(); InputStream is = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, UTF-8); String strRead = null; while (strRead = reader.readLine() != null) sbf.append(strRead); sbf.append(rn); reader.close(); result = sbf.toString(); catch (Exception e) e.printStackTrace(); );thread.start();/等待上述线程完成执行后再返回jsonText。try Thread.sleep(1000); catch (InterruptedException e) e.printStackTrace();5) Worlist的侧滑功能private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() Override public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) int width = getResources().getDimensionPixelSize(R.dimen.dp_70); / 1. MATCH_PARENT 自适应高度,保持和Item一样高; / 2. 指定具体的高,比如80; / 3. WRAP_CONTENT,自身高度,不推荐; int height = ViewGroup.LayoutParams.MATCH_PARENT; / 根据ViewType来决定哪一个item该如何添加菜单。 / 这里模拟业务,实际开发根据自己的业务计算。 if (viewType % 3 = 0) SwipeMenuItem deleteItem = new SwipeMenuItem(context) .setBackground(R.drawable.selector_red) .setText(删除) .setTextColor(Color.WHITE) .setWidth(width) .setHeight(height); swipeRightMenu.addMenuItem(deleteItem);/ 添加菜单到右侧。 SwipeMenuItem addItem = new SwipeMenuItem(context) .setBackground(R.drawable.selector_green) .setText(编辑) .setTextColor(Color.WHITE) .setWidth(width) .setHeight(height); swipeRightMenu.addMenuItem(addItem); / 添加菜单到右侧。 ;/* * RecyclerView的Item的Menu点击监听。 */private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() Override public void onItemClick(SwipeMenuBridge menuBridge) menuBridge.closeMenu(); int direction = menuBridge.getDirection(); / 左侧还是右侧菜单。 int adapterPosition = menuBridge.getAdapterPosition(); / RecyclerView的Item的position。 int menuPosition = menuBridge.getPosition(); / 菜单在RecyclerView的Item中的Position。 if (direction = SwipeMenuRecyclerView.RIGHT_DIRECTION) /Toast.makeText(MainActivity.this, list第 + adapterPosition + ; 右侧菜单第 + menuPosition, Toast.LENGTH_SHORT).show(); if(menuPosition = 1) System.out.println(xiugai); Toast.makeText(context, 修改, Toast.LENGTH_SHORT).show(); UpdatetDialog(String.valueOf(list.get(adapterPosition).getId(),list.get(adapterPosition).getWord_name(), list.get(adapterPosition).getWord_meaning(); /refreshList(); else if(menuPosition = 0) System.out.println(shanchu); Toast.makeText(context, 删除, Toast.LENGTH_SHORT).show(); operate.DeleteUseSql(String.valueOf(list.get(adapterPosition).getId(); refreshList(); ;6) 搜索中有道Api的调用:private void query(String query) Language langFrom = LanguageUtils.getLangByName(英文); Language langTo = LanguageUtils.getLangByName(中文); TranslateParameters tps = new TranslateParameters.Builder() .source(wordtest).from(langFrom).to(langTo).timeout(3000).build();/ appkey可以省略 translator = Translator.getInstance(tps); /showLoadingView(正在查询); System.out.println(query +query); translator.lookup(query, new TranslateListener() Override public void onResult(final Translate result, String input) System.out.println(Result +result.getQuery(); List explains = result.getWebExplains(); StringBuilder sb = new StringBuilder(); sb.append(网络释义:); sb.append(n); if (explains != null) for (WebExplain s : explains) sb.append(s.getKey().append(listStr(s.getMeans().append(n); System.out.println(resu+sb); word_meaning.setText(sb); word_voice.setVisibility(View.VISIBLE); add_word.setVisibility(View.VISIBLE); word_voice_text.setText(result.getUkPhonetic(); add_word.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) operate.Insert(word_name.getText().toString(),word_meaning_dict.getText().toString(); Toast.makeText(context, 添加:+word_name.getText().toString(),Toast.LENGTH_SHORT); ); word_voice.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) MediaPlayer mp = new MediaPlayer(); try createVoice(); System.out.println(loading.); while (!isfilefinish) System.out.print(.); mp.setDataSource(/sdcard/audio.mp3); mediaPlayer = mp; mediaPlayer.prepare(); mediaPlayer.start(); isfilefinish = false; mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() Override public void onCompletion(MediaPlayer mediaPlayer) mediaPlayer.release(); System.out.println(DeleteVoice(); ); catch (Exception e) System.out.println(e); ); Override public void onError(TranslateErrorCode error) Toast.makeText(context,查询错误: + ().toString(),Toast.LENGTH_SHORT); );7) 初始单词数据内容:public void create_word() throws Exception SQLiteDatabase db = mDbHelper.getWritableDatabase(); InputStreamReader in = new InputStreamReader(context.getResources().getAssets().open(test.txt); /FileInputStream in = new FileInputStream(test.txt); /StringBuffer buffer = new StringBuffer(); Cursor c = db.rawQuery(select * from word_Dict, null); if(c.getCount() != 0) return; String line; / 用来保存每行读取的内容 BufferedReader bufferreader = new BufferedReader(in); line = bufferreader.readLine()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智慧公交系统实施方案与公交智能调度技术评估报告
- 邵阳书画买卖合同范本
- 酒店会务英文合同范本
- 常山绿色产业发展与区域经济协同创新研究-洞察及研究
- 汽配企业合作合同范本
- 酒业工厂销售合同范本
- 黄牛买卖收购合同范本
- 餐厅员工押金合同范本
- 高校技术开发合同范本
- 活动接待合同范本模板
- 无领导小组讨论的经典面试题目及答案解析
- 许昌襄城县特招医学院校毕业生招聘笔试真题2024
- 永辉超市快消培训
- 2025北京京剧院招聘10人考试备考试题及答案解析
- 2025至2030中国催收外包服务行业销售模式及未来营销策略分析报告
- 2025-2030矿山工程机械租赁市场商业模式与风险防控报告
- 公务用车管理培训课件
- 跨文化视野下《哪吒之魔童降世》字幕翻译探究
- 2026年高考语文复习:文言文背诵篇目理解性默写练习题汇编(含答案)
- 2025高考新课标二卷语文试卷(含答案)
- 2025年新为父母设立居住权协议书
评论
0/150
提交评论