單詞本設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
單詞本設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
單詞本設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
單詞本設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
單詞本設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí) 驗(yàn) 報(bào) 告課程名稱 移動(dòng)應(yīng)用開發(fā)_實(shí)驗(yàn)項(xiàng)目 單詞本實(shí)現(xiàn) 實(shí)驗(yàn)儀器 _系 別 專 業(yè) 班級(jí)/學(xué)號(hào) 學(xué)生姓名 實(shí)驗(yàn)日期 _成 績(jī) _ 指導(dǎo)教師 _一、 實(shí)驗(yàn)?zāi)康?. 了解Android數(shù)據(jù)存儲(chǔ)的基本概念;2. 理解并掌握SQLite數(shù)據(jù)庫(kù)的使用方法;3. 進(jìn)一步熟悉與掌握Fragment使用。4. 進(jìn)一步熟悉各組件、適配器、菜單、對(duì)話框等相關(guān)概念和技術(shù)等。5. 掌握ContentProvider相關(guān)概念和技術(shù)。6. 掌握Handler相關(guān)概念和技術(shù)。二、 實(shí)驗(yàn)要求1. 課前預(yù)習(xí)實(shí)驗(yàn)內(nèi)容,并查找相關(guān)資料。2. 按照實(shí)驗(yàn)步驟完成各個(gè)相關(guān)內(nèi)容。3. 撰寫實(shí)驗(yàn)報(bào)告。a) 實(shí)驗(yàn)報(bào)告格式必須符合學(xué)校要求(

2、例如必須采用學(xué)校規(guī)定的實(shí)驗(yàn)封面);b) 寫出實(shí)驗(yàn)詳細(xì)步驟,包括主要采用的技術(shù)方案、相關(guān)分析和核心代碼。注意:不要簡(jiǎn)單地近包括截屏和代碼,完整代碼可以作為附錄放在實(shí)驗(yàn)報(bào)告結(jié)尾;c) 總結(jié)實(shí)驗(yàn)中遇到的問(wèn)題、分析和解決方法。d) 寫出心得體會(huì)與收獲等。三、 實(shí)驗(yàn)內(nèi)容1. 文件構(gòu)成:1) Java文件:對(duì)應(yīng)功能:2) 資源文件包括:Asset下的本地詞庫(kù)文件背景定義文件各個(gè)Activity和Fragment的Layout對(duì)話框界面各個(gè)List的Item定義不同的菜單文件數(shù)組、邊界值、顏色值等2. 功能實(shí)現(xiàn)分析:主界面:側(cè)滑:主界面采用三個(gè)Fragment利用FragmentManager進(jìn)行切換管理,

3、默認(rèn)的單詞本Fragment是一個(gè)經(jīng)過(guò)擴(kuò)展的RecyclerView,可以實(shí)現(xiàn)左滑刪除編輯,并且通過(guò)對(duì)Adapter的修改可以實(shí)現(xiàn)隱藏解釋達(dá)到背單詞的效果,也可以通過(guò)對(duì)數(shù)據(jù)加載的管理實(shí)現(xiàn)按字母或者按新舊排序。搜索Fragment:在App第一次進(jìn)入時(shí)會(huì)對(duì)本地的txt進(jìn)行加載,并放到Sqlite數(shù)據(jù)庫(kù)中,在獲取搜索的關(guān)鍵字后對(duì)數(shù)據(jù)庫(kù)進(jìn)行搜索并返回給ListView,點(diǎn)擊ListViewde的item后根據(jù)單詞鏈接有道API進(jìn)行查詢,并返回其讀音和解釋,點(diǎn)擊添加則可以添加到單詞列表。翻譯Fragment:翻譯功能利用有道Api提供的翻譯接口進(jìn)行翻譯,可以實(shí)現(xiàn)中文和任意語(yǔ)言的互相轉(zhuǎn)化。新聞名言打開今

4、日一句和BBC新聞今日一句和BBC新聞兩個(gè)都是獲取Json解析得到,并放入對(duì)應(yīng)的數(shù)據(jù)中。3. 核心代碼:1) 修改對(duì)話框:private void InsertDialog() final TableLayout tableLayout = (TableLayout) getActivity().getLayoutInflater().inflate(R.layout.insert, null); new AlertDialog.Builder(context) .setTitle("新增單詞")/標(biāo)題 .setView(tableLayout)/設(shè)置視圖 /確定按鈕及其動(dòng)

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語(yǔ)句插入,也可以使用使用insert方法插入 operate.Insert(strWord, strMeaning); refreshList(); ) /取消按鈕及其動(dòng)作 .setNegativeButton("取消", new DialogInterface.OnClickListener() Override public void onClick(DialogInterface dialogInterface, int i) ) .create()/創(chuàng)建對(duì)話框 .show();/顯示對(duì)話框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();/等待上述線程完成執(zhí)行后再返回jsonText。try Thread.sleep(1000); catch (InterruptedEx

18、ception e) e.printStackTrace();5) Worlist的側(cè)滑功能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 自適應(yīng)高度

19、,保持和Item一樣高; / 2. 指定具體的高,比如80; / 3. WRAP_CONTENT,自身高度,不推薦; int height = ViewGroup.LayoutParams.MATCH_PARENT; / 根據(jù)ViewType來(lái)決定哪一個(gè)item該如何添加菜單。 / 這里模擬業(yè)務(wù),實(shí)際開發(fā)根據(jù)自己的業(yè)務(wù)計(jì)算。 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);/ 添加菜單到右側(cè)。 SwipeMenuItem addItem = new SwipeMenuItem(context) .setBackground(R.drawable.selector_green) .setText("編輯") .setTextColor(Color.WHITE) .setWidth(width) .setHeight(height);

21、 swipeRightMenu.addMenuItem(addItem); / 添加菜單到右側(cè)。 ;/* * RecyclerView的Item的Menu點(diǎn)擊監(jiān)聽。 */private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() Override public void onItemClick(SwipeMenuBridge menuBridge) menuBridge.closeMenu(); int direction = menuBridge.getDirecti

22、on(); / 左側(cè)還是右側(cè)菜單。 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 + " 右側(cè)菜單第" + 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的調(diào)用: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("網(wǎng)絡(luò)釋義:"); 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,"查詢錯(cuò)誤:" + ().toString(

32、),Toast.LENGTH_SHORT); );7) 初始單詞數(shù)據(jù)內(nèi)容: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; / 用來(lái)保存每行讀取的內(nèi)容 BufferedReader bufferreader = new BufferedReader(in); line = bufferreader.readLine(); / 讀取

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論