当前位置: 编程技术>移动开发
本页文章导读:
▪新风干浪博客学习(一)plist文件读写操作 新风作浪博客学习(一)plist文件读写操作
文件plist 全名Property List,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此通常被称为 plist文件。文.........
▪ 加减的艺术用来工作学习管理 加减的艺术用于工作学习管理
回顾做过的事情,总结起来,就是先加,后减,再加。不是吗?上学:先一点点的学习,积累,到现在,回忆似乎懂的就是那么一点?做软件:先了解业务、.........
▪ VideoView容易视频播放 VideoView简单视频播放
只是上上手而已的例子。
package com.chenchen.app;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import android.app.Activity;
.........
[1]新风干浪博客学习(一)plist文件读写操作
来源: 互联网 发布时间: 2014-02-18
新风作浪博客学习(一)plist文件读写操作
文件plist 全名Property List,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此通常被称为 plist文件。文件是xml格式的。file->new->file->左边选Resource 右边选 Property List点右下角的next然后起名,出来的就是你要的plist文件
此处用例举一个plist文件的Demo,只是对plist文件简单的读写操作
新建工程命名plistFile,class Prefix 填写PF,然后next
[img]
[/img]
开始的时候并没有加入plist文件,除了工程自动生成的plistFile-Info.plist,然后直接在PFViewContoller.m文件中的viewDidLoad添加代码:
这样做的目的只是想测试一下如果我们没有手工创建一个plist文件,当我们读取的时候系统会不会自动创建一个plist文件,测试结果是系统不会生成plist文件,输出plist文件内容为nil,运行结果截图:
[img]
[/img]
然后我们在手动创建一个plist文件,命名为testInfo.plist
[img]
[/img]
[img]
[/img]
[img]
[/img]
通过手动创建了plist文件后再次运行,可以读取数据:
[img]
[/img]
但是当我们打开testInfo.plist文件时,发现没有内容,这个有些不理解:
[img]
[/img]
然后我们在testInfo.plist文件右键Add Row,就可在里面添加数据;
[img]
[/img]
手动在testInfo.plist中添加了如下数据,然后点击运行:
[img]
[/img]
[img]
[/img]
从结果中我们可以看出,Key1,和key2在第一个NSLog打印中没有,因为key1和key2是在第一个NSLog后在写入testInfo.plist之中;
怎样用代码在向testInfo.plist中添加一个数组呢,在ViewDidLoad后面添加如下代码,即可以实现:
运行结果截图如下:
[img]
[/img]
文件plist 全名Property List,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此通常被称为 plist文件。文件是xml格式的。file->new->file->左边选Resource 右边选 Property List点右下角的next然后起名,出来的就是你要的plist文件
此处用例举一个plist文件的Demo,只是对plist文件简单的读写操作
新建工程命名plistFile,class Prefix 填写PF,然后next
[img]
[/img]
开始的时候并没有加入plist文件,除了工程自动生成的plistFile-Info.plist,然后直接在PFViewContoller.m文件中的viewDidLoad添加代码:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // 读取plist文件 NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"testInfo" ofType:@"plist"]; NSMutableDictionary *data=[[NSMutableDictionary alloc] initWithContentsOfFile:plistPath]; // 打印出plist文件 NSLog(@"%@",data); // 写入plist文件 [data setObject:@"test1" forKey:@"key1" ]; [data setObject:@"test2" forKey:@"key2"]; [data writeToFile:@"testInfo.plist" atomically:YES]; NSLog(@"%@",data); NSLog(@"%@",[data objectForKey:@"key2"]); }
这样做的目的只是想测试一下如果我们没有手工创建一个plist文件,当我们读取的时候系统会不会自动创建一个plist文件,测试结果是系统不会生成plist文件,输出plist文件内容为nil,运行结果截图:
[img]
[/img]
然后我们在手动创建一个plist文件,命名为testInfo.plist
[img]
[/img]
[img]
[/img]
[img]
[/img]
通过手动创建了plist文件后再次运行,可以读取数据:
[img]
[/img]
但是当我们打开testInfo.plist文件时,发现没有内容,这个有些不理解:
[img]
[/img]
然后我们在testInfo.plist文件右键Add Row,就可在里面添加数据;
[img]
[/img]
手动在testInfo.plist中添加了如下数据,然后点击运行:
[img]
[/img]
[img]
[/img]
从结果中我们可以看出,Key1,和key2在第一个NSLog打印中没有,因为key1和key2是在第一个NSLog后在写入testInfo.plist之中;
怎样用代码在向testInfo.plist中添加一个数组呢,在ViewDidLoad后面添加如下代码,即可以实现:
NSArray *array = [[NSArray alloc] initWithObjects:@"tes11",@"test12",@"test13",@"test14", nil];//数组初始化 [data setObject:array forKey:@"arraytest"];//设置数组键值 [data writeToFile:@"customInfo.plist" atomically:YES];//将数组数据写入testInfo.plist文件中 NSLog(@"%@",data);
运行结果截图如下:
[img]
[/img]
[2] 加减的艺术用来工作学习管理
来源: 互联网 发布时间: 2014-02-18
加减的艺术用于工作学习管理
回顾做过的事情,总结起来,就是先加,后减,再加。
不是吗?
上学:先一点点的学习,积累,到现在,回忆似乎懂的就是那么一点?
做软件:先了解业务、客户、尽可能的了解、模拟过程,到形成原型,再到产品,中间进行了多少次的加、减 ?
要注意的是千万不要将次要的东西当成主要矛盾来处理。
刚才想到了很多,现在突然好像又忘记了,请大家一起来写下去吧,
谢谢大力支持!
回顾做过的事情,总结起来,就是先加,后减,再加。
不是吗?
上学:先一点点的学习,积累,到现在,回忆似乎懂的就是那么一点?
做软件:先了解业务、客户、尽可能的了解、模拟过程,到形成原型,再到产品,中间进行了多少次的加、减 ?
要注意的是千万不要将次要的东西当成主要矛盾来处理。
刚才想到了很多,现在突然好像又忘记了,请大家一起来写下去吧,
谢谢大力支持!
[3] VideoView容易视频播放
来源: 互联网 发布时间: 2014-02-18
VideoView简单视频播放
只是上上手而已的例子。
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
<!--为屏蔽home健而加-->
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
只是上上手而已的例子。
package com.chenchen.app; import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.List; import java.util.Random; import android.app.Activity; import android.content.Context; import android.media.MediaPlayer; import android.os.Bundle; import android.view.KeyEvent; import android.view.WindowManager; import android.widget.MediaController; import android.widget.Toast; import android.widget.VideoView; public class MainActivity extends Activity { private Context context; private VideoView videoView; /*视频文件分别放在三个文件夹中,需要到时候全部放入一个list中随机播放*/ private static final String MUSIC_PATH_1 = new String("/sdcard/qingbao/1/"); private static final String MUSIC_PATH_2 = new String("/sdcard/qingbao/2/"); private static final String MUSIC_PATH_3 = new String("/sdcard/qingbao/3/"); private List<String> mMusicList = new ArrayList<String>(); private int curIndex = 0;// Random r=new Random(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context=this; listFiles(); } /* 播放列表 */ private void listFiles() { // 取得指定位置的文件设置显示到播放列表 File path_1 = new File(MUSIC_PATH_1); File[] list = path_1.listFiles(new MusicFilter()); if (list.length > 0) { for (File file : list) { mMusicList.add(MUSIC_PATH_1+file.getName()); } } File path_2 = new File(MUSIC_PATH_2); list = path_2.listFiles(new MusicFilter()); if (list.length > 0) { for (File file : list) { mMusicList.add(MUSIC_PATH_2+file.getName()); } } File path_3 = new File(MUSIC_PATH_3); list = path_3.listFiles(new MusicFilter()); if (list.length > 0) { for (File file : list) { mMusicList.add(MUSIC_PATH_3+file.getName()); } } } /* 过滤文件类型 */ class MusicFilter implements FilenameFilter { public boolean accept(File dir, String name) { // 这里还可以设置其他格式的文件 return (name.endsWith(".mp4")); } } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); if(videoView!=null&&videoView.isPlaying()){ videoView.pause(); } } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); startVideo(); } private void startVideo(){ videoView = (VideoView) findViewById(R.id.videoView); MediaController mc = new MediaController(context); videoView.setMediaController(mc); // videoView.setVideoURI(Uri.parse("http://....h.3gp")); videoView.requestFocus(); play(); videoView .setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub play();//播放完毕再继续下一首 } }); videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { // TODO Auto-generated method stub play();//播放出错再继续下一首 return true; } }); } private void play(){ curIndex=r.nextInt(mMusicList.size()); videoView.setVideoPath(mMusicList.get(curIndex)); videoView.start(); } private long waitTime = 2000; private long touchTime = 0; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN && KeyEvent.KEYCODE_BACK == keyCode) { long currentTime = System.currentTimeMillis(); if ((currentTime - touchTime) >= waitTime) { Toast.makeText(context, "再按一次退出程序", Toast.LENGTH_SHORT).show(); touchTime = currentTime; } else { finish(); System.exit(0); } return true; }else if(KeyEvent.KEYCODE_HOME == keyCode){ return true; } return super.onKeyDown(keyCode, event); } @Override public void onAttachedToWindow () { /*本想屏蔽Home键,加上后播放器没画面,但有声音,why?*/ // this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <VideoView android:id="@+id/videoView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
<!--为屏蔽home健而加-->
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
最新技术文章: