DASH流媒体MPD文件存储
Android中常見的持久化數據存儲方法有三個:文件存儲、SharedPreferences存儲和數據庫存儲。文件存儲的核心思想是將數據按照streaming的形式保存到本地,這點與C++有共通點。寫一個利用文件存儲數據的簡單實例,重新定義《MPD解析模塊在Android中的實現》中提到的parseXMLWithPull(String xmlData)方法,在showResponse()后接著調用Save()方法,將解析數據保存到本地:
private void parseXMLWithPull(String xmlData) { //MPD解析方法Represent repres = new Represent();//實例化一個Representation對象String line = "";try {XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); //獲得一個XMLPULL工廠類的實例XmlPullParser xmlPullParser = factory.newPullParser(); //獲得一個XML解析器的實例xmlPullParser.setInput(new StringReader(xmlData));int eventType = xmlPullParser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {String nodeName = xmlPullParser.getName();switch (eventType) {// 通過判斷事件類型來選擇執行不同的代碼// 開始解析某個結點case XmlPullParser.START_TAG: {if ("Representation".equals(nodeName)) {//由<Representation開始解析repres.setId(xmlPullParser.getAttributeValue(null, "id"));repres.setWidth(xmlPullParser.getAttributeValue(null, "width"));repres.setHeight(xmlPullParser.getAttributeValue(null, "height"));}break;}// 完成解析某個結點case XmlPullParser.END_TAG: {if ("Representation".equals(nodeName)) { //由Representation--/>結束解析Log.d("Representation", "id is " + repres.getId());//在調試窗口logcat打印出屬性值Log.d("Representation", "width is " + repres.getWidth());Log.d("Representation", "height is " + repres.getHeight());line = line +"ID: "+ repres.getId()+"; WIDTH: "+repres.getWidth()+"; HEIGHT: "+repres.getHeight()+";\n";//將已經遍歷的屬性值連接成一個字符串,并注意換行}break;}default:break;}eventType = xmlPullParser.next();}showResponse(line);//將字符串對象傳入showResponse()方法,打印在UI的TextViewSave(line);//保存數據到本地文件} catch (Exception e) {e.printStackTrace();}}
利用文件存儲方式保存數據,Save()方法可以定義為:
public void Save(String streaming){FileOutputStream out = null;BufferedWriter writer = null;try {out = openFileOutput("mpd", Context.MODE_APPEND);
//文件名定義為mpd,因為會多次調用Save()方法,不希望每次覆蓋之前內容,因此聲明為MODE_APPENDwriter = new BufferedWriter(new OutputStreamWriter(out));writer.write(streaming);}catch (IOException e){e.printStackTrace();}finally {try{if(writer != null){writer.close();}}catch (IOException e){e.printStackTrace();}}}
Run App之后點擊MainActivity頁面的send request按鈕,執行:
在Device File Explore視窗中Data/Data/應用包名/files/下面找到新創建的mpd文件:
打開mpd文件,查看存儲的解析數據:
在真機上運行App,但是通過手機的管理文件夾不能搜索到mpd文件,網上的解答是,應用的數據文件不能被用戶直接看到,只有將手機ROOT后才可以看到Data文件。
文件存儲只適用于保存一些簡單的數據和鍵值對,當需要存儲大量復雜的關系型數據時,便會用到數據庫。使用SQLite數據庫對上面的實例進行重寫。首先建立一個MPDdatabaseHelper類,繼承自SQLiteOpenHelper類,重寫父類的構造方法、onCreate()方法和onUpgrade()方法,并定義表單的創建語句構成的數據成員字符串。
package com.example.xmlparser;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;/*** @Author Fupenzi on 2019/1/4.* @Blog https://blog.csdn.net/qq_34041083*/public class MPDdatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_DATABASE = "create table MPD("+"id string primary key,"+"width string,"+"height string)";private Context context;public MPDdatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){super(context, name, factory, version);}@Overridepublic void onCreate(SQLiteDatabase database){database.execSQL(CREATE_DATABASE);}@Overridepublic void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion){}
}
在public class MainActivity extends AppCompatActivity implements View.OnClickListener 類中聲明類MPDdatabaseHelper對象成員:
private MPDdatabaseHelper mpdHelper;
并在MainActivity活動的onCreate()方法中對mpdHelper對象進行實例化
mpdHelper = new MPDdatabaseHelper(this, "MPD.database",null,1);
在private void parseXMLWithPull() 方法中創建數據庫并聲明數據填充對象
SQLiteDatabase database = mpdHelper.getWritableDatabase();
//getWritableDatabase()方法檢測并創建數據庫,返回一個數據庫對象ContentValues values = new ContentValues();//數據庫內容填充對象
在case XmlPullParser.END_TAG:……解析結果后面,對將解析結果寫入到數據庫內容對象中,并將寫好的內容insert到表單中,之后清空內容對象。
values.put("id",repres.getId());values.put("width",repres.getWidth());values.put("height",repres.getHeight());database.insert("MPD",null,values);values.clear();
Run App,通過文件夾視窗可以看到創建的表單:
再通過Terminal進入到該目錄利用命令行窗口查看MPD.database中的內容
可以看到表單內容和之前本地文件存儲的內容一樣,說明MPD解析的內容成功保存到數據庫中。
總結
以上是生活随笔為你收集整理的DASH流媒体MPD文件存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个性签名在线制作
- 下一篇: 张开头的成语有哪些?