网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
在布局中添加Text组件用以显示提示信息及读取到的时间,代码如下:
Text text= new Text(this);
text.setText("初始文本"); //设置初始显示文本
text.setTextSize(50);
DirectionalLayout.LayoutConfig layoutConfig = newDirectionalLayout.LayoutConfig (ComponentContainer.LayoutConfig.MATCH_CONTENT,ComponentContainer.LayoutConfig.MATCH_CONTENT);
layoutConfig.alignment = LayoutAlignment.HORIZONTAL_CENTER;
text.setLayoutConfig(layoutConfig);
directionLayout.addComponent(text);
在本例中两个设备通过各自的Button组件实现时间的读写,因此,需要添加两个Button组件,首先添加写入时间的Button组件,代码如下:
//实现写入功能的Button,用来读取当前时间,并写入分布式文档中
Button button1 = new Button(this);
layoutConfig.setMargins(0, 50,0,0);
button1.setLayoutConfig(layoutConfig);
button1.setText("写入现在时间");
button1.setTextSize(50);
ShapeElement background1 = new ShapeElement();
background1.setRgbColor(new RgbColor(0xFF51A8DD));
background1.setCornerRadius(25);
button1.setBackground(background1);
button1.setPadding(10, 10, 10, 10);
button1.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component Component) {
goWrite(text); //单击Button,实现写入功能
}
});
directionLayout.addComponent(button1);
添加读取时间的Button组件,代码如下:
//实现读取功能的Button,从分布式文档中读取已经写入的时间
Button button2 = new Button(this);
layoutConfig.setMargins(0, 50,0,0);
button2.setLayoutConfig(layoutConfig);
button2.setText("读取上一个时间");
button2.setTextSize(50);
ShapeElement background2 = new ShapeElement();
background2.setRgbColor(new RgbColor(0xFF5100DD));
background2.setCornerRadius(25);
button2.setBackground(background1);
button2.setPadding(10, 10, 10, 10);
button2.setClickedListener(new Component.ClickedListener() {
@Override
//单击Button,实现读取功能
public void onClick(Component Component) {
goRead(text);
}
});
directionLayout.addComponent(button2);
写入功能是由goWrite()方法实现的,分析其实现过程,代码如下:
//goWrite():写入button1的onClick事件执行的方法
private void goWrite(Text text) {
String sharedFileName = sharedFileName(this); //获取分布式文件路径
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str=simpleDateFormat.format(new Date().getTime()); //获取时间戳并转换成标准形式
//将时间写入分布式文件
try{
FileWriter fileWriter = new FileWriter(sharedFileName,false);
fileWriter.write(str);
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
text.setText("写入的时间:"+str); text.invalidate();
}
读取功能是由goRead()方法实现的,其实现过程代码如下:
//goRead():读取button2的onClick事件执行的方法
private void goRead(Text text) {
String sharedFileName = sharedFileName(this); //获取分布式文件路径
//读取分布式文件中的数据,若读到则输出,若没读到则输出没读到
try{
FileReader fileReader = new FileReader(sharedFileName);
BufferedReader br = new BufferedReader(fileReader);
String b = br.readLine();
text.setText("读取到的上一个写入的时间:"+b);
text.invalidate();
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
text.setText("没读到");
text.invalidate();
}
}
二者都是通过shareFileName()方法获取分布式文件路径的,代码如下:
File distDir = context.getDistributedDir(); //获取分布式文件目录
//在分布式文件目录下新建一个名为note.txt的文件,读写都在这个文件中进行
String filePath = distDir+File.separator+"note.txt";
return filePath; //返回新建文件的路径
}
需要说明的是,利用Context.getDistributedDir()接口可以获取属于自己的分布式目录,然后通过libc或JDK 接口,可以在该目录下创建、删除、读写文件或目录。本例中在所获取的分布式目录下创建了一个读写文件note.txt。
基于两个手机设备进行验证,在开始功能验证之前,两个手机需要登录同一个华为账号,并且需要开启多设备协同权限且开启多设备协同连接。具体的设置过程可参考前面对多设备协同权限设置的介绍。
设置完成后进行功能验证。首先,在未写入的情况下直接进行读取,读取结果如图2所示,未写入的情况下读取内容为空。
■ 图2 未写入情况下直接进行读取
由Phone A 写入当前时间,Phone B读取当前时间,读写效果如图3所示。
■ 图3 Phone A写入当前时间,Phone B读取A写入的时间
由Phone B 写入当前时间,Phone A 进行读取时,读写效果如图4 所示。
■ 图4 Phone B写入当前时间,Phone A读取B写入的时间
至此,分布式文件服务功能成功实现。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!