




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實 驗 報 告課程名稱 移動應(yīng)用開發(fā)_實驗項目 單詞本實現(xiàn) 實驗儀器 _系 別 專 業(yè) 班級/學號 學生姓名 實驗日期 _成 績 _ 指導教師 _一、 實驗?zāi)康?. 了解Android數(shù)據(jù)存儲的基本概念;2. 理解并掌握SQLite數(shù)據(jù)庫的使用方法;3. 進一步熟悉與掌握Fragment使用。4. 進一步熟悉各組件、適配器、菜單、對話框等相關(guān)概念和技術(shù)等。5. 掌握ContentProvider相關(guān)概念和技術(shù)。6. 掌握Handler相關(guān)概念和技術(shù)。二、 實驗要求1. 課前預(yù)習實驗內(nèi)容,并查找相關(guān)資料。2. 按照實驗步驟完成各個相關(guān)內(nèi)容。3. 撰寫實驗報告。a) 實驗報告格式必須符合學校要求(
2、例如必須采用學校規(guī)定的實驗封面);b) 寫出實驗詳細步驟,包括主要采用的技術(shù)方案、相關(guān)分析和核心代碼。注意:不要簡單地近包括截屏和代碼,完整代碼可以作為附錄放在實驗報告結(jié)尾;c) 總結(jié)實驗中遇到的問題、分析和解決方法。d) 寫出心得體會與收獲等。三、 實驗內(nèi)容1. 文件構(gòu)成:1) Java文件:對應(yīng)功能:2) 資源文件包括:Asset下的本地詞庫文件背景定義文件各個Activity和Fragment的Layout對話框界面各個List的Item定義不同的菜單文件數(shù)組、邊界值、顏色值等2. 功能實現(xiàn)分析:主界面:側(cè)滑:主界面采用三個Fragment利用FragmentManager進行切換管理,
3、默認的單詞本Fragment是一個經(jīng)過擴展的RecyclerView,可以實現(xiàn)左滑刪除編輯,并且通過對Adapter的修改可以實現(xiàn)隱藏解釋達到背單詞的效果,也可以通過對數(shù)據(jù)加載的管理實現(xiàn)按字母或者按新舊排序。搜索Fragment:在App第一次進入時會對本地的txt進行加載,并放到Sqlite數(shù)據(jù)庫中,在獲取搜索的關(guān)鍵字后對數(shù)據(jù)庫進行搜索并返回給ListView,點擊ListViewde的item后根據(jù)單詞鏈接有道API進行查詢,并返回其讀音和解釋,點擊添加則可以添加到單詞列表。翻譯Fragment:翻譯功能利用有道Api提供的翻譯接口進行翻譯,可以實現(xiàn)中文和任意語言的互相轉(zhuǎn)化。新聞名言打開今
4、日一句和BBC新聞今日一句和BBC新聞兩個都是獲取Json解析得到,并放入對應(yīng)的數(shù)據(jù)中。3. 核心代碼:1) 修改對話框:private void InsertDialog() final TableLayout tableLayout = (TableLayout) getActivity().getLayoutInflater().inflate(R.layout.insert, null); new AlertDialog.Builder(context) .setTitle("新增單詞")/標題 .setView(tableLayout)/設(shè)置視圖 /確定按鈕及其動
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()/創(chuàng)建對話框 .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();/等待上述線程完成執(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來決定哪一個item該如何添加菜單。 / 這里模擬業(yè)務(wù),實際開發(fā)根據(jù)自己的業(yè)務(wù)計算。 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點擊監(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,"查詢錯誤:" + ().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; / 用來保存每行讀取的內(nèi)容 BufferedReader bufferreader = new BufferedReader(in); line = bufferreader.readLine(); / 讀取
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 超大陽臺賣房合同協(xié)議
- 財務(wù)監(jiān)管協(xié)議書范本
- 購買亞克力板合同協(xié)議
- 訂單種植紅蘿卜合同協(xié)議
- 購買生豬養(yǎng)殖合同協(xié)議
- 訂貨賠償合同協(xié)議模板
- 資質(zhì)服務(wù)合同協(xié)議書范本
- 2025年跨文化交際能力測試卷及答案
- 2025年經(jīng)濟學原理課程考試試卷及答案詳解
- 2025年理科綜合高考考試試卷及答案
- 呼吸道合胞病毒知識科普
- 峨眉山月歌-李白
- 高速公路收費員培訓模板案例(個人經(jīng)驗總結(jié)分析)
- 跨文化交際智慧樹知到課后章節(jié)答案2023年下齊魯工業(yè)大學
- (完整版)中國書法英文版
- 宏觀經(jīng)濟學期末考試試題(含答案)
- 構(gòu)建規(guī)、建、管、運一體化的明珠灣智慧城市信息平臺
- 電梯井操作平臺
- 臨床免疫學檢驗技術(shù)第26章 腫瘤免疫及其免疫檢測
- 第三人稱單數(shù)專項練習(動詞)
- 膳管會會議記錄
評論
0/150
提交評論