本文章来给大家介绍在安卓手机开发中的常用文件操作代码,这里一个不错的文件操作类,希望对大家有所帮助哦。
代码如下 |
复制代码 |
package cn.youxigu.files;
import cn.youxigu.service.*;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.view.*;
public class MainActivity extends Activity {
EditText filename;
EditText content;
Button buttonsave;
Button buttonopen;
Button buttonsaveSdCard;
Button buttonopenSdCard;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
filename = (EditText)this.findViewById(R.id.filename);
content = (EditText)this.findViewById(R.id.content);
//获取本地保存按钮
buttonsave = (Button)this.findViewById(R.id.buttonsave);
//获取本地打开按钮
buttonopen = (Button)this.findViewById(R.id.buttonsaveopen);
//获取SD卡保存按钮
buttonsaveSdCard = (Button)this.findViewById(R.id.buttonsavesdcard);
//获取SD卡打开按钮
buttonopenSdCard = (Button)this.findViewById(R.id.buttonsaveopensdcard);
buttonsave.setOnClickListener(new SaveFileClick());
buttonopen.setOnClickListener(new OpenFileClick());
buttonsaveSdCard.setOnClickListener(new SaveSdCardFileClick());
buttonopenSdCard.setOnClickListener(new OpenSdCardFileClick());
}
/**
* 保存到本地的存储
* @author xiaolu
*
*/
private final class SaveFileClick implements View.OnClickListener{
@Override
public void onClick(View v) {
String files = filename.getText().toString();
String contents = content.getText().toString();
FileService file = new FileService(getApplicationContext());
try{
file.save(files, contents);
Toast.makeText(getApplicationContext(), "保存成功", 1).show();
} catch (Exception e){
Toast.makeText(getApplicationContext(), "保存失败", 1).show();
e.printStackTrace();
}
}
}
/**
* 打开本地的存储
* @author xiaolu
*
*/
private final class OpenFileClick implements View.OnClickListener{
@Override
public void onClick(View v) {
String filenames = filename.getText().toString();
FileService file = new FileService(getApplicationContext());
try{
String contents = file.read(filenames);
//填充到文本框
content.setText(contents);
Toast.makeText(getApplicationContext(), "打开成功", 1).show();
} catch (Exception e){
Toast.makeText(getApplicationContext(), "打开失败", 1).show();
e.printStackTrace();
}
}
}
/**
* 保存到SD卡的存储
* @author xiaolu
*
*/
private final class SaveSdCardFileClick implements View.OnClickListener{
@Override
public void onClick(View v) {
String files = filename.getText().toString();
String contents = content.getText().toString();
FileService file = new FileService(getApplicationContext());
try{
file.saveSdCard(files, contents);
Toast.makeText(getApplicationContext(), "保存到SD卡成功", 1).show();
} catch (Exception e){
Toast.makeText(getApplicationContext(), "保存到SD卡失败", 1).show();
e.printStackTrace();
}
}
}
/**
* 打开SD卡的存储
* @author xiaolu
*
*/
private final class OpenSdCardFileClick implements View.OnClickListener{
@Override
public void onClick(View v) {
String filenames = filename.getText().toString();
FileService file = new FileService(getApplicationContext());
try{
String contents = file.readSdCard(filenames);
//填充到文本框
content.setText(contents);
Toast.makeText(getApplicationContext(), "打开SdCard成功", 1).show();
} catch (Exception e){
Toast.makeText(getApplicationContext(), "打开SdCard失败", 1).show();
e.printStackTrace();
}
}
}
}
|
FileService文件代码:
代码如下 |
复制代码 |
package cn.youxigu.service;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import android.content.Context;
import android.os.Environment;
public class FileService {
//获取上下文
private Context context;
public FileService(Context context){
this.context = context;
}
/**
* 读取本地存储文件内容
* @param filename 文件名
* @return 文件内容
* @throws Exception
*/
public String read(String filename) throws Exception{
FileInputStream InputStream = context.openFileInput(filename);
//申请写入内存
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len = InputStream.read(buffer)) != -1){
outStream.write(buffer);
}
byte[] data = outStream.toByteArray();
return new String(data);
}
/**
* 保存到本地存储
* @param filename 文件名
* @param content 文件内容
* @throws Exception
*/
public void save(String filename, String content) throws Exception{
FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_PRIVATE);
outStream.write(content.getBytes());
outStream.close();
}
/**
* 保存到SdCard存储
* @param filename 文件名
* @param content 文件内容
* @throws Exception
*/
public void saveSdCard(String filename, String content) throws Exception{
//获取SD卡路径
File sdCardDir = Environment.getExternalStorageDirectory();
File saveFile = new File(sdCardDir, filename);
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write(content.getBytes());
outStream.close();
}
/**
* 读取SdCard存储文件内容
* @param filename 文件名
* @return 文件内容
* @throws Exception
*/
public String readSdCard(String filename) throws Exception{
//获取SD卡路径
File sdCardDir = Environment.getExternalStorageDirectory();
File openFile = new File(sdCardDir, filename);
//用输入流对象进行读取数据
FileInputStream InputStream = new FileInputStream(openFile);
//申请写入内存
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len = InputStream.read(buffer)) != -1){
outStream.write(buffer);
}
byte[] data = outStream.toByteArray();
return new String(data);
}
}
|
main.xml 文件代码:
代码如下 |
复制代码 |
<?xml version=“1.0″ encoding=“utf-8″?>
<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:layout_width=“fill_parent”
android:layout_height=“fill_parent”
android:orientation=“vertical” >
<TextView
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:text=“@string/filenametext” />
<EditText
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:id=“@+id/filename”/>
<EditText
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:minLines=“3″
android:id=“@+id/content”/>
<Button
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“@string/buttonsave”
android:id=“@+id/buttonsave”
/>
<Button
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“@string/buttonopen”
android:id=“@+id/buttonsaveopen”
/>
<Button
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“@string/buttonsavesdcard”
android:id=“@+id/buttonsavesdcard”
/>
<Button
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“@string/buttonopensdcard”
android:id=“@+id/buttonsaveopensdcard”
/>
</LinearLayout> |
本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。
Android在绑定服务的时候出现java.lang.ClassCastException:android.os.BinderProxy cannot be cast to com.
修改manifest文件里边相关服务去掉android:process=":remote"即可。
文章主要是介绍关于PC电脑和Android模拟器访问及模拟器之间tcp/udp通信,各位有需要了解同学可进入参考。
Android系统默认只能通过IP(10.0.2.2)单向访问PC电脑,而PC电脑不能通过IP来直接访问Android模拟器系统。要想实现PC电脑和Android模拟器系统以及Android模拟器之间相互通信必须借助端口重定向(redir)来实现。
先说说端口重定向所需要的telnet客户端安装:
windows:
安装telnet客户端。如果没有安装,可以在windows程序管理中的打开或关闭系统功能下找到telnet客户端菜单项来启用telnet客户端功能。
linux:
自行安装telnet客户端。
一、PC电脑不能直接访问Android模拟器系统的原因
Android系统为实现通信将PC电脑IP设置为10.0.2.2,自身为10.0.2.15/127.0.0.1。然而PC电脑并没有为Android模拟器系统指定IP,所以PC只能通过端口重定向来实现和Android模拟器的通信。
二、PC电脑和Android模拟器系统之间通信
1、运行模拟器
2、打开window 命令行,执行:
5554是模拟器的端口(位于Android模拟器窗口标题栏),执行之后会进入android console
3、在console下执行:
格式:redir add < udp/tcp >:< pc端口 >:< 模拟器端口 >
例如:redir add udp:2888:2888
redir add tcp:2888:2888
执行此命令之后,会把PC 2888 端口接收到的tcp/udp数据转到模拟器的2888端口。
三、多个Android模拟器系统之间通信
1、启动模拟器emulator-5554和emulator-5556
2、打开dos窗口执行telnet localhost 5554连接到模拟器5554
3、成功连接后,继续执行:redir add tcp:5000:6000将PC端口5000绑定到模拟器5554的端口6000上。
4、此时模拟器5556通过向PC电脑端口5000(即地址:10.0.2.2:5000)发送tcp/udp数据包跟模拟器5554通信。
5、同理根据步骤2、3来实现PC电脑对模拟器5556的端口转发。
添加成功后,我们可以用redir list命令来列出已经添加的映射端口,redir del可以进行删除。
相信只要理解了PC电脑和Android模拟器系统之间通信,便知道怎么实现多个模拟器之间通信。
进行TCP通信的时候,在本机上启动两个模拟器,本机(PC)和模拟器时发现两个模拟器的IP地址都是完全一样的,所以要实现两个模拟器之间的通信,使用模拟器的IP地址是办不到的。必须进行端口映射。
模拟器提供了一个特殊的IP,此IP的地址为10.0.2.2,此IP地址可以说等同于PC本机的IP地址127.0.0.1 。所以,通过此特殊IP地址,实现PC本机与模拟器的通信是没有问题。
首先 ,运行模拟器在命令行adb –s emulator -模拟器 forward tcp:端口号 tcp:端口号(例如:adb –s emulator-5554 forward tcp:8080 tcp:8090)
PC-SERVER:ServerSocket server = new ServerSocket(8080);
模拟器-CLIENT:Socket socket = new Socket("10.0.2.2", 8090);
接下来是如何在两个模拟器之间进行通信:同样的先进行端口映射:adb –s emulator -模拟器 forward tcp:端口号 tcp:端口号(先运行模拟器).代码如下:
adb –s emulator-5554 forward tcp:8080 tcp:8081
模拟器(5554)-SERVER:ServerSocket server = new ServerSocket(8080);
模拟器(5556)-CLIENT:Socket socket = new Socket("10.0.2.2", 8081);
因为模拟器5556连接的地址10.0.2.2:8080相当于本机的127.0.0.1:8080,由于进行了端口映射本机IP8080上的连接请求都映射到5554:8081上,因此模拟器5556的请求会发送到5554上.
本文章来给各位同学详细介绍关于Android布局之TableLayout-TableRow布局,各位同学有需要可进入参考。
代码如下 |
复制代码 |
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TableRow>
<TextView
android:text="column1"
android:padding="3dip" />
<TextView
android:text="column2"
android:padding="3dip" />
<TextView
android:text="column3"
android:padding="3dip" />
</TableRow>
<TableRow>
<TextView
android:text="column11"
android:visibility="invisible"/> //cell不见了
<TextView
android:text="左边的invisible"
android:gravity="right"
android:padding="3dip" />
<Button
android:id="@+id/go"
android:text="go"
android:padding="3dip" />
<Button
android:text="cancel"
android:padding="3dip" />
</TableRow>
<View //间隔线
android:layout_height="2dip"
android:background="#F00" />
<TableRow>
<TextView
android:text="右边的cell empty" />
<TextView
android:layout_column="2"
android:text="跳开empty cell"
android:padding="3dip" />
</TableRow>
<TableRow>
<TextView
android:text="合并3个单元格"
android:layout_span="3"
android:gravity="center_horizontal"
android:background="#FFC0C0C0"
android:textColor="#f00"
android:padding="3dip" />
</TableRow>
</TableLayout>
|
TableLayout跟TableRow是一组搭配使用的布局,TableLayout置底,TableRow在TableLayout的上面,而Button、TextView等控件就在TableRow之上,另外,TableLayout之上也可以单独放控件。TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但实际上,会经常在代码里使用TableLayout,例如做出表格的效果。本文主要介绍TableLayout的基本使用方法。
TableLayout经常用的属性是:
android:collapseColumns:以第0行为序,隐藏指定的列:
android:collapseColumns该属性为空时,如下图:
把android:collapseColumns=0,2————–》意思是把第0和第2列去掉,如下图:
android:shrinkColumns:以第0行为序,自动延伸指定的列填充可用部分:
当LayoutRow里面的控件还没有布满布局时,shrinkColumns不起作用,如下图:
设置了shrinkColumns=0,1,2,布局完全没有改变,因为LayoutRow里面还剩足够的空间。
当LayoutRow布满控件时,如下图:
设置设置了shrinkColumns=2,则结果如下图,控件自动向垂直方向填充空间:
android:stretchColumns:以第0行为序,尽量把指定的列填充空白部分:
设置stretchColumns=1,则结果如下图,第1列被尽量填充(Button02与TextView02同时向右填充,直到TextView03被压挤到最后边)。
Android的TableLayout + TableRow虽然使用有点复杂,但是功能很强大。。。。。。Android提供了很多布局属性,但是手机程序的界面没有PC那么花俏,所以常用的就那几项而已。。。
wifi上网 几乎是不需要什么设置了,我们只要简单的输入wifi密码与用户名就可以自动连接wifi上网了,下面我以安卓4.1系统为实例
具体步骤
1.在安卓手机中点击“系统设置”有的手机是“设置”点击进入
2.在手机的设置中我们会看到有如“wifi设置”选项 如下图:
3.进入wifi设置以后,打开WLAN选项,此时它会自动进行搜索周围的wifi信号,
4.一般的wifi都是需要密码的,没关系,如果你在肯德基、麦当劳、咖啡馆等这样的公共领域问问服务员就可以了,在公司的话就问问同事呗,输入密码连接即可。
小提示
如果此方法设置之后你手机无法上网那可能是你的wifi密码与用户名错误了,或是的IP与网络其它IP冲突了。
标签:[!--infotagslink--]