[Android開發學習] day05

註冊activity就是確定絕對目錄。

 

創建搜索界面

註冊activity

做界面

 

Edittext msearch

Listview mlv


將數據庫查詢的數據封裝到map中

 

自定義適配器。???

對數據庫的操作層

1.  在XXXDao.java文件中修改查詢方法的返回值爲List<Map<String, Object>>

2.  聲明並初始化一個List<Map<String,Object>>類型的以map爲單位的list

3.  聲明並初始化一個Map<String,Object> map=new TreeMap<String, Object>();

4.  給map集合添加數據。

map.put("id",id);

                map.put("name",name);

               map.put("cuisine",cuisine);

               map.put("material",material);

               map.put("ingredient",ingredient);

               map.put("picpath",picpath);

               map.put("cookingstep",cookingstep);

               map.put("videopath",videopath);

               map.put("audiopath",audiopath);

5.  將map添加到list中:list.add(map);

6.  修改返回值:return list;

 

代碼如下:

//根據條件查詢——>name

    publicList<Map<String,Object>> selectedByName(String name){

           List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();

           openDB();

           String sql="name like'%"+name+"%'";

           Cursor c=db.query("food",null, sql, null,null, null,null);

           if(c!=null){

              while (c.moveToNext()) {

                  int id=c.getInt(c.getColumnIndex("id"));

                  String name1=c.getString(c.getColumnIndex("name"));

                  String cuisine=c.getString(c.getColumnIndex("cuisine"));

                  String material=c.getString(c.getColumnIndex("material"));

                  String ingredient=c.getString(c.getColumnIndex("ingredient"));

                  String picpath=R.drawable.ic_launcher+"";

//                Stringpicpath=c.getString(c.getColumnIndex("picpath"));

                  String cookingstep=c.getString(c.getColumnIndex("cookingstep"));

                  String videopath=c.getString(c.getColumnIndex("videopath"));

                  String audiopath=c.getString(c.getColumnIndex("audiopath"));

             

                  Map<String,Object> map=new TreeMap<String, Object>();

                  map.put("id",id);

                  map.put("name",name);

                  map.put("cuisine",cuisine);

                  map.put("material",material);

                  map.put("ingredient",ingredient);

                  map.put("picpath",picpath);

                  map.put("cookingstep",cookingstep);

                  map.put("videopath",videopath);

                  map.put("audiopath",audiopath);

                 

                  list.add(map);

//                System.out.println(id+"---"+name1);

                           

              }

           }

           closeDB();

          

           return list;

       }

          

}

 

實時動態檢索

在SearchActivity.java文件中,

1.  聲明組件,及需要的數據

private EditTextmSearch;

    private ListViewmLv;

    privateDao dao;

    privateList<Map<String,Object>> data;

    privateString[] from={"picpath","name"};

    privateint []to={R.id.search_item_img,R.id.search_item_tv};

2.  在onCreate()方法中設置綁定佈局。

setContentView(R.layout.activity_search);

3.  初始化組件

    mSearch=(EditText)findViewById(R.id.search_edtx);

    mLv=(ListView)findViewById(R.id.listView1);

    data=newArrayList<Map<String,Object>>();

    dao=new Dao(this);

4.  給mSearchTextView添加addTextChangedListener()方法

onTextChanged(CharSequence s, int arg1, int arg2,int arg3){

String name=s.toString();

//獲取text字符串àname中

        if(name.length()>0){

        data=dao.selectedByName(name);

       //調用dao中的selectedByName方法通過name對SQLite進行查找,並將數據返回給data的list,map

        SimpleAdapter adapter=newSimpleAdapter(SearchActivity.this,data,R.layout.search_item,from,to);

//創建adapter

        mLv.setAdapter(adapter);

//給組件綁定adapter

               

}

 

 

 

ListView的單擊事件

點擊listview觸發事件:綁定單擊監聽器:setOnItemClickListener,參數new OnItemClickListener導入包,然後重寫方法

 

publicvoidonItemClick(AdapterView<?> parent, View view,intposition,long id)方法中設置意圖:

 

Intent it=newIntent(SearchActivity.this,DetailsActivity.class);

startActivity(it);

 

listview裏的編號從0開始,和數組一致。

Toast.makeText(SearchActivity.this, position+"", Toast.LENGTH_SHORT);

 

 

 

 

多媒體:音頻和視頻的播放

MediaPlayer 播放音頻(其實既能音頻又能視頻)不隨着activity釋放而終止。

 

生命週期:

Reset()方法:音樂資源重置。

Release()方法:整個mediaPlayer資源釋放。

setDataSource():設置你要播放歌曲的路徑。

 

Prepare()方法:準備狀態。

Start方法:播放

Paused方法:暫停,

Stop方法:停止

 

MediaPlayer組件OnCompletionListener監聽器音樂播放完畢,釋放資源

//綁定監聽器:處理歌曲播放完畢的事件

      player.setOnCompletionListener(newOnCompletionListener() {

           @Override

           publicvoid onCompletion(MediaPlayermp) {

              player.reset();

                 

           }

       });

 

 

Button綁定【播放音頻】功能

1.  XxxActivity.java中implements OnClickListener

publicclass MainActivity extends Activityimplements OnClickListener

2.  private ButtonmPlay,mPause,mStop;

3.  publicvoid onClick(Viewv)

switch(v.getId()){

    case R.id.play:

        //綁定音頻資源

        break;

    case R.id.pause:

        break;

    case R.id.stop:

        break;

    }

4.  初始化組件,設置點擊監聽器

mPause=(Button)findViewById(R.id.pause);

       mPlay=(Button) findViewById(R.id.play);

       mStop=(Button) findViewById(R.id.stop);

       mPause.setOnClickListener(this);

       mStop.setOnClickListener(this);

    mPlay.setOnClickListener(this);

5.   聲明MediaPlayer變量,path路徑

private MediaPlayerplayer;

private Stringpath="/mnt/sdcard/chuanqi.mp3";

6.   初始化MediaPlayer

player=new MediaPlayer();

7.   給player綁定音頻資源,添加try模塊——(寫在OnCreate方法中)

player.setDataSource(path);

//準備播放

player.prepare();

8.   在case中添加播放

case R.id.play:

           //播放

           player.start();

           break;

9.   在case中添加暫停

case R.id.pause:

        if(player.isPlaying()){

           player.pause();

        }  

        break;

10.  在case中添加停止,並重新加載和綁定音頻資源

case R.id.stop:

        if(player.isPlaying()){

               player.stop();

        }

        player.reset();

           //綁定音頻資源

           player.setDataSource(path);

           //準備播放

           player.prepare();

 

 

綁定資源庫:

1.  Ctrl+鼠標左鍵點擊:Button

2.  attachsource-> external location à external folder:

3.  找到本機sources文件所在地,指向路徑:

path :D:/adt-bundle-windows-x86-20131030/sdk/sources

4.  OK

 

準備音頻資源:推入模擬器的sdk裏,注意名字不能是中文!!!

DDMS:選中左側啓動的模擬器。

MntàSDCard->選中sdcard:選中push a file onto the device。

 

 

 

 

視頻播放VideoView組件

 

支持播放:mp4,一般超過28M的視頻播放失敗,內存爆掉

創建VideoActivity.java文件

1.  聲明私有變量

privateVideoViewmVideo;

private Stringpath;

private MediaControllercontroller;

2.   初始化

mVideo=(VideoView) findViewById(R.id.videoView1);

3.  綁定視頻資源

//綁定視頻資源

       path="/mnt/sdcard/lantingxu.mp4";

       mVideo.setVideoPath(path);

4.  創建媒體控制條

//創建媒體控制條

controller=newMediaController(VideoActivity.this);

5.  綁定控制條

//綁定控制條

   mVideo.setMediaController(controller);

6.  播放視頻

//播放視頻

mVideo.start();      

 

7.  播放完畢之後處理:交給OnCompletionListener處理

//播放完畢之後處理:交給OnCompletionListener處理

mVideo.setOnCompletionListener(new OnCompletionListener(){

           

            @Override

            publicvoidonCompletion(MediaPlayer mp) {

                // TODO Auto-generated method stub

                mVideo.stopPlayback();

               

            }

         });

 

 

遇到adb失去聯繫的情況!!!

在windows資源管理器,結束adb.exe進程樹,然後重新在DDMS左邊,reset adb

 

 

 

關於音頻播放的Activity頁面跳轉之後返回的操作。

 

OnPause()方法

 

protectedvoid onPause() {

       //TODO Auto-generatedmethod stub

       super.onPause();

       if(player.isPlaying()){

           player.stop();

           player.reset();

       }

       player.release();

       //mediaplay釋放掉。onCreate方法,在一個actuvity的生命週期中只有一次。再次回來,進入resume生命週期,而非oncreate

    }

 

 

OnResume()方法

@Override

    protectedvoid onResume() {

       //TODO Auto-generatedmethod stub

       super.onResume();

       if(player==null){

           player=new MediaPlayer();

           try {

              //綁定音頻資源

              player.setDataSource(path);

              //準備播放

              player.prepare();

          

           } catch (IllegalArgumentException e) {

              // TODO Auto-generatedcatch block

              e.printStackTrace();

           } catch (SecurityException e) {

              // TODO Auto-generatedcatch block

              e.printStackTrace();

           } catch (IllegalStateException e) {

              // TODO Auto-generatedcatch block

              e.printStackTrace();

           } catch (IOException e) {

              // TODO Auto-generatedcatch block

              e.printStackTrace();

           }

       }

    }




實例代碼:

publicclass AudioController {

    privateMediaPlayer  play;

 

    public AudioController() {

       super();

       this.play = new MediaPlayer();

       this.play.setOnCompletionListener(new  OnCompletionListener() {

          

           @Override

           publicvoid onCompletion(MediaPlayer mp) {

              play.reset();

              //播放完畢將歌曲資源重置

             

           }

       });

    }

   

    publicvoid load(String path){

       try {

           play.setDataSource(path);

           play.prepare();

       } catch (IllegalArgumentException e) {

           // TODO Auto-generatedcatch block

           e.printStackTrace();

       } catch (SecurityException e) {

           // TODO Auto-generatedcatch block

           e.printStackTrace();

       } catch (IllegalStateException e) {

           // TODO Auto-generatedcatch block

           e.printStackTrace();

       } catch (IOException e) {

           // TODO Auto-generatedcatch block

           e.printStackTrace();

       }

      

    }

   

    //播放的控制

    //播放

    publicvoid play(String path){

           load(path);

           play.start();

    }

   

    //暫停

    publicvoid pause(){

       if(play.isPlaying()){

           play.pause();

       }

    }

   

    //停止

    publicvoid stop(){

       if(play.isPlaying()){

           play.pause();

           play.stop();

       }

      

       play.reset();

//     play.release();

//     play=null;

    }

   

    //退出方法:將整個mediaplay資源釋放

    publicvoid exit(){

       play.release();

       play=null;

    }

   

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章