单词本设计与实现_第1页
单词本设计与实现_第2页
单词本设计与实现_第3页
单词本设计与实现_第4页
单词本设计与实现_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实 验 报 告课程名称 移动应用开发_实验项目 单词本实现 实验仪器 _系 别 专 业 班级/学号 学生姓名 实验日期 _成 绩 _ 指导教师 _一、 实验目的1. 了解Android数据存储的基本概念;2. 理解并掌握SQLite数据库的使用方法;3. 进一步熟悉与掌握Fragment使用。4. 进一步熟悉各组件、适配器、菜单、对话框等相关概念和技术等。5. 掌握ContentProvider相关概念和技术。6. 掌握Handler相关概念和技术。二、 实验要求1. 课前预习实验内容,并查找相关资料。2. 按照实验步骤完成各个相关内容。3. 撰写实验报告。a) 实验报告格式必须符合学校要求(

2、例如必须采用学校规定的实验封面);b) 写出实验详细步骤,包括主要采用的技术方案、相关分析和核心代码。注意:不要简单地近包括截屏和代码,完整代码可以作为附录放在实验报告结尾;c) 总结实验中遇到的问题、分析和解决方法。d) 写出心得体会与收获等。三、 实验内容1. 文件构成:1) Java文件:对应功能:2) 资源文件包括:Asset下的本地词库文件背景定义文件各个Activity和Fragment的Layout对话框界面各个List的Item定义不同的菜单文件数组、边界值、颜色值等2. 功能实现分析:主界面:侧滑:主界面采用三个Fragment利用FragmentManager进行切换管理,

3、默认的单词本Fragment是一个经过扩展的RecyclerView,可以实现左滑删除编辑,并且通过对Adapter的修改可以实现隐藏解释达到背单词的效果,也可以通过对数据加载的管理实现按字母或者按新旧排序。搜索Fragment:在App第一次进入时会对本地的txt进行加载,并放到Sqlite数据库中,在获取搜索的关键字后对数据库进行搜索并返回给ListView,点击ListViewde的item后根据单词链接有道API进行查询,并返回其读音和解释,点击添加则可以添加到单词列表。翻译Fragment:翻译功能利用有道Api提供的翻译接口进行翻译,可以实现中文和任意语言的互相转化。新闻名言打开今

4、日一句和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)/设置视图 /确定按钮及其动

5、作 .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.txtMea

6、ning).getText().toString(); /既可以使用Sql语句插入,也可以使用使用insert方法插入 operate.Insert(strWord, strMeaning); refreshList(); ) /取消按钮及其动作 .setNegativeButton("取消", new DialogInterface.OnClickListener() Override public void onClick(DialogInterface dialogInterface, int i) ) .create()/创建对话框 .show();/显示对话框2)

7、 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(searc

8、h_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

9、= 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

10、.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) tran

11、saction2.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 = r

12、ootArray.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

13、.getJSONArray("imageUrls"); List<String> piclist = new ArrayList<String>(); 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(Str

14、ing) 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

15、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 = (HttpsURLConne

16、ction) url.openConnection(); connection.setHostnameVerifier(new TrustAnyHostNameVerifier(); connection.setSSLSocketFactory(ssf); connection.setRequestMethod("GET"); connection.connect(); InputStream is = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, &qu

17、ot;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 (InterruptedEx

18、ception 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 自适应高度

19、,保持和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("删除&qu

20、ot;) .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);

21、 swipeRightMenu.addMenuItem(addItem); / 添加菜单到右侧。 ;/* * RecyclerView的Item的Menu点击监听。 */private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() Override public void onItemClick(SwipeMenuBridge menuBridge) menuBridge.closeMenu(); int direction = menuBridge.getDirecti

22、on(); / 左侧还是右侧菜单。 int adapterPosition = menuBridge.getAdapterPosition(); / RecyclerView的Item的position。 int menuPosition = menuBridge.getPosition(); / 菜单在RecyclerView的Item中的Position。 if (direction = SwipeMenuRecyclerView.RIGHT_DIRECTION) /Toast.makeText(MainActivity.this, "list第" + adapterP

23、osition + " 右侧菜单第" + 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_n

24、ame(), 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) 搜索中有道Ap

25、i的调用: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).buil

26、d();/ 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 "+res

27、ult.getQuery(); List<WebExplain> 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"); Syste

28、m.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_

29、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 creat

30、eVoice(); 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.OnComple

31、tionListener() 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(

32、),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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论