Android中8个常用的操作
来源:互联网 发布:淘宝客定向计划是什么 编辑:程序博客网 时间:2024/06/03 19:42
1.Android EditText的输入监听,输入字符的动态获取
有时候我们可能会用到时时的监听EditText输入字符的时时监听,监听字符的个数,做一些正则表达式的处理等。如下方法可以实现:
我做的是时时的把EditeText输入的数据同步到TextView上
布局文件:
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <TextView
- android:id="@+id/textview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerHorizontal="true"
- android:layout_centerVertical="true"
- android:padding="@dimen/padding_medium"
- tools:context=".Test02Activity" />
- <EditText
- android:id="@+id/editText1"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_alignLeft="@+id/textview"
- android:layout_below="@+id/textview"
- android:layout_marginTop="31dp"
- >
- <requestFocus />
- </EditText>
- </RelativeLayout>
java代码:
- package com.example.testdemo;
- import android.os.Bundle;
- import android.app.Activity;
- import android.util.Log;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.widget.EditText;
- import android.widget.TextView;
- import android.support.v4.app.NavUtils;
- import android.text.Editable;
- import android.text.TextWatcher;
- public class Test02Activity extends Activity {
- private static final String TAG= "Test";
- private EditText mEditText;
- private TextView mTextView;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_test02);
- mEditText = (EditText) findViewById(R.id.editText1);
- mTextView = (TextView) findViewById(R.id.textview);
- mEditText.addTextChangedListener(new TextWatcher(){
- @Override
- public void afterTextChanged(Editable s) {
- Log.d(TAG, "afterTextChanged");
- }
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count,
- int after) {
- Log.d(TAG, "beforeTextChanged:" + s + "-" + start + "-" + count + "-" + after);
- }
- @Override
- public void onTextChanged(CharSequence s, int start, int before,
- int count) {
- Log.d(TAG, "onTextChanged:" + s + "-" + "-" + start + "-" + before + "-" + count);
- mTextView.setText(s);
- }
- });
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.activity_test02, menu);
- return true;
- }
- }
清单文件中需要加入两个权限:
MainActivity实现:
- package com.mth.readMessage;
- import java.io.File;
- import java.io.FileOutputStream;
- import org.xmlpull.v1.XmlSerializer;
- import android.app.Activity;
- import android.content.ContentResolver;
- import android.database.Cursor;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Environment;
- import android.util.Xml;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.Toast;
- /**
- * 说明: 本程序的目的是通过创建xml文件在sd卡上
- * 完成短信的备份
- *
- */
- public class MainActivity extends Activity {
- private Button read_message;
- // 短信备份的文件对象
- private File smsBackUpFile;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- read_message = (Button) findViewById(R.id.read);
- read_message.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View arg0) {
- try {
- /*
- * 创建一个存储备份短信的文件对象 (在sd卡上面创建一个叫sms.xml的文件对象)
- */
- smsBackUpFile = new File(Environment
- .getExternalStorageDirectory(), "sms.xml");
- // 创建一个xml文件的生成器
- XmlSerializer xmlSerializer = Xml.newSerializer();
- // 完成序列化器初始操作
- FileOutputStream out = new FileOutputStream(smsBackUpFile);
- xmlSerializer.setOutput(out, "utf-8");
- // 内容提供者。
- ContentResolver resolver = getContentResolver();
- /*
- * uri 查询什么样的路径(短信的路径)
- * projection 获取数据中的哪几列数据
- * selection selectionArgs sortOrder 查询条件 可以都写null
- */
- // 游标(结果集)
- Cursor cursor = resolver.query(Uri.parse("content://sms"),
- new String[] { "address", "date", "type", "body" },
- null, null, null);
- /**
- * 生成的xml文件格式
- * <smss>
- * <sms>
- * <address>110</address>
- * <body>nihao a</body>
- * <date>时间</date>
- * <type>类型</type>
- * </sms>
- * </smss>
- */
- /**
- * 生成xml文件的头
- */
- xmlSerializer.startDocument("utf-8", true);
- /**
- * 生成根节点
- */
- xmlSerializer.startTag(null, "smss");
- while (cursor.moveToNext()) {
- xmlSerializer.startTag(null, "sms");
- String address = cursor.getString(0);
- String date = cursor.getString(1);
- String type = cursor.getString(2);
- String body = cursor.getString(3);
- /**
- * 地址
- */
- xmlSerializer.startTag(null, "address");
- xmlSerializer.text(address);
- xmlSerializer.endTag(null, "address");
- /**
- * date
- */
- xmlSerializer.startTag(null, "date");
- xmlSerializer.text(date);
- xmlSerializer.endTag(null, "date");
- /**
- * body
- */
- xmlSerializer.startTag(null, "body");
- xmlSerializer.text(body);
- xmlSerializer.endTag(null, "body");
- /**
- * type
- */
- xmlSerializer.startTag(null, "type");
- xmlSerializer.text(type);
- xmlSerializer.endTag(null, "type");
- xmlSerializer.endTag(null, "sms");
- }
- cursor.close();
- /**
- * 根节点配对
- */
- xmlSerializer.endTag(null, "smss");
- /**
- * 生成文档的结尾
- */
- xmlSerializer.endDocument();
- /**
- * 关闭输出流
- */
- out.close();
- Toast.makeText(getApplicationContext(), "短信备份成功!",
- Toast.LENGTH_LONG).show();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- });
- }
- }
PowerManager这个类提供了电源管理的一些功能,比如可以让屏幕或者键盘亮起来等。还有对设备的重启的api
官网是这么解释的
PowerManager Class Overview
这个类提供了控制设备电源状态的管理功能。
设备的电池的持续时间(寿命)会受到使用这个API的重要影响。在非必要的情况下不要使用WakeLock,即使必须使用,也要最低限度使用这个api,使用完之后应确保立即释放掉。
通过 Context.getSystemService()获得PowerManager的实例。
使用PowerManager的实例去获得一个WakeLock对象,使用这个方法:newWakeLock() 创建一个
PowerManager.WakeLock
对象.使用WakeLock对象可以去管理设备电源的状态,使用方法特别简单:如下例子
<span class="typ" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 0, 102);">PowerManager</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);"> pm </span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">=</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);"> </span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">(</span><span class="typ" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 0, 102);">PowerManager</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">)</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);"> getSystemService</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">(</span><span class="typ" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 0, 102);">Context</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);">POWER_SERVICE</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">);</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);"> </span><span class="typ" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 0, 102);">PowerManager</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">.</span><span class="typ" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 0, 102);">WakeLock</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);"> wl </span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">=</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);"> pm</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);">newWakeLock</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">(</span><span class="typ" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 0, 102);">PowerManager</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);">SCREEN_DIM_WAKE_LOCK</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">,</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);"> </span><span class="str" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 136, 0);">"My Tag"</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">);</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);"> wl</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);">acquire</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">();</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);"> //在释放之前,屏幕一直亮着(有可能会变暗,但是还可以看到屏幕内容)</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);"> wl</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);">release</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(102, 102, 0);">();</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.200000762939453px; color: rgb(0, 0, 0);"> </span>
下面定义的这些标记不同程度的影响系统电源。这些标记都是独占的,并且每次只能指定其中一个。
PARTIAL_WAKE_LOCK
SCREEN_DIM_WAKE_LOCK
SCREEN_BRIGHT_WAKE_LOCK
FULL_WAKE_LOCK
如果你使用的是局部唤醒锁的话(使用PARTIAL_WAKE_LOCK标志),CPU会继续运行,将忽略任何的计时器,甚至按下电源按钮。其他的唤醒锁话,CPU也会继续运转,但是使用者仍然可以按电源按钮让设备睡眠。
另外,你可以使用两个以上的标记,但是他只影响屏幕的行为。和 PARTIAL_WAKE_LOCK 同时使用的话,没有任何影响。
ACQUIRE_CAUSES_WAKEUP
ON_AFTER_RELEASE
一个小例子
package com.example.powers;import android.os.Bundle;import android.os.PowerManager;import android.os.PowerManager.WakeLock;import android.app.Activity;import android.content.Context;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.support.v4.app.NavUtils;public class MainActivity extends Activity {private WakeLock wakeLock;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overrideprotected void onResume() {super.onResume();// 开始获得唤醒锁acquireWakeLock();}@Overridepublic void finish() {super.finish();// 释放锁releaseWakeLock();}private void acquireWakeLock() {if (wakeLock == null) {Log.d("debug", "Acquiring wake lock");PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, this.getClass().getCanonicalName());wakeLock.acquire();}}private void releaseWakeLock() {if (wakeLock != null && wakeLock.isHeld()) {wakeLock.release();wakeLock = null;}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}}
- public class VideoService {
- public List<Video> getJsonVieos() throws IOException, JSONException{
- String path = "http://111.14.19.37:8080/vidoe/video/list.do?format=json";
- URL url = new URL(path);
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- conn.setConnectTimeout(5 * 1000);
- conn.setRequestMethod("GET");
- InputStream is = conn.getInputStream();
- byte[] data = InputStreamUtil.getByteArray(is);//用自己写的工具类把流转成byte数组
- String json = new String(data);
- JSONArray array = new JSONArray(json);
- List<Video> videos = new ArrayList<Video>();
- for(int i = 0; i<array.length(); i++){
- JSONObject jo = array.getJSONObject(i);
- int id = jo.getInt("id");
- String title = jo.getString("title");
- int timelength = jo.getInt("timelength");
- videos.add(new Video(id, title, timelength));
- }
- return videos;
- }
- }
- public boolean uploadPostMethod(String path, Map<String, String> params) throws IOException{
- StringBuilder sb = new StringBuilder();
- for(Map.Entry<String, String> entry : params.entrySet()){
- //sb.append(entry.getKey()).append('=').append(entry.getValue()).append('&');
- sb.append(entry.getKey()).append('=').append(URLEncoder.encode(entry.getValue(), "UTF-8")).append('&');
- }
- sb.deleteCharAt(sb.length() - 1);
- byte[] entitydata = sb.toString().getBytes();
- URL url = new URL(path);
- HttpURLConnection conn = (HttpURLConnection)url.openConnection();
- conn.setConnectTimeout(5 * 1000);
- conn.setRequestMethod("POST");
- conn.setDoOutput(true);
- conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
- conn.setRequestProperty("Content-Length", String.valueOf(entitydata.length));
- OutputStream os = conn.getOutputStream();
- os.write(entitydata);
- os.flush();
- os.close();
- if(conn.getResponseCode() == 200){
- return true;
- }
- return false;
- }
http协议上传文件一般最大是2M,比较适合上传小于两M的文件
下面是封装的一个文件类:
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.InputStream;
- /**
- * 上传的文件
- */
- public class FormFile {
- /* 上传文件的数据 */
- private byte[] data;
- private InputStream inStream;
- private File file;
- /* 文件名称 */
- private String filname;
- /* 请求参数名称*/
- private String parameterName;
- /* 内容类型 */
- private String contentType = "application/octet-stream";
- /**
- *
- * @param filname 文件名称
- * @param data 上传的文件数据
- * @param parameterName 参数
- * @param contentType 内容类型
- */
- public FormFile(String filname, byte[] data, String parameterName, String contentType) {
- this.data = data;
- this.filname = filname;
- this.parameterName = parameterName;
- if(contentType!=null) this.contentType = contentType;
- }
- /**
- *
- * @param filname 文件名
- * @param file 上传的文件
- * @param parameterName 参数
- * @param contentType 内容内容类型
- */
- public FormFile(String filname, File file, String parameterName, String contentType) {
- this.filname = filname;
- this.parameterName = parameterName;
- this.file = file;
- try {
- this.inStream = new FileInputStream(file);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- if(contentType!=null) this.contentType = contentType;
- }
- public File getFile() {
- return file;
- }
- public InputStream getInStream() {
- return inStream;
- }
- public byte[] getData() {
- return data;
- }
- public String getFilname() {
- return filname;
- }
- public void setFilname(String filname) {
- this.filname = filname;
- }
- public String getParameterName() {
- return parameterName;
- }
- public void setParameterName(String parameterName) {
- this.parameterName = parameterName;
- }
- public String getContentType() {
- return contentType;
- }
- public void setContentType(String contentType) {
- this.contentType = contentType;
- }
- }
下面的方法封装的http协议上传数据:
- /**
- * 直接通过HTTP协议提交数据到服务器,实现如下面表单提交功能:
- * <FORM METHOD=POST ACTION="http://192.168.0.200:8080/ssi/fileload/test.do" enctype="multipart/form-data">
- <INPUT TYPE="text" NAME="name">
- <INPUT TYPE="text" NAME="id">
- <input type="file" name="imagefile"/>
- <input type="file" name="zip"/>
- </FORM>
- * @param path 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,你可以使用http://www.xxx.cn或http://192.168.1.10:8080这样的路径测试)
- * @param params 请求参数 key为参数名,value为参数值
- * @param file 上传文件
- */
- public static boolean post(String path, Map<String, String> params, FormFile[] files) throws Exception{
- final String BOUNDARY = "---------------------------7da2137580612"; //数据分隔线
- final String endline = "--" + BOUNDARY + "--\r\n";//数据结束标志
- int fileDataLength = 0;
- for(FormFile uploadFile : files){//得到文件类型数据的总长度
- StringBuilder fileExplain = new StringBuilder();
- fileExplain.append("--");
- fileExplain.append(BOUNDARY);
- fileExplain.append("\r\n");
- fileExplain.append("Content-Disposition: form-data;name=\""+ uploadFile.getParameterName()+"\";filename=\""+ uploadFile.getFilname() + "\"\r\n");
- fileExplain.append("Content-Type: "+ uploadFile.getContentType()+"\r\n\r\n");
- fileExplain.append("\r\n");
- fileDataLength += fileExplain.length();
- if(uploadFile.getInStream()!=null){
- fileDataLength += uploadFile.getFile().length();
- }else{
- fileDataLength += uploadFile.getData().length;
- }
- }
- StringBuilder textEntity = new StringBuilder();
- for (Map.Entry<String, String> entry : params.entrySet()) {//构造文本类型参数的实体数据
- textEntity.append("--");
- textEntity.append(BOUNDARY);
- textEntity.append("\r\n");
- textEntity.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");
- textEntity.append(entry.getValue());
- textEntity.append("\r\n");
- }
- //计算传输给服务器的实体数据总长度
- int dataLength = textEntity.toString().getBytes().length + fileDataLength + endline.getBytes().length;
- URL url = new URL(path);
- int port = url.getPort()==-1 ? 80 : url.getPort();
- Socket socket = new Socket(InetAddress.getByName(url.getHost()), port);
- OutputStream outStream = socket.getOutputStream();
- //下面完成HTTP请求头的发送
- String requestmethod = "POST "+ url.getPath()+" HTTP/1.1\r\n";
- outStream.write(requestmethod.getBytes());
- String accept = "Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n";
- outStream.write(accept.getBytes());
- String language = "Accept-Language: zh-CN\r\n";
- outStream.write(language.getBytes());
- String contenttype = "Content-Type: multipart/form-data; boundary="+ BOUNDARY+ "\r\n";
- outStream.write(contenttype.getBytes());
- String contentlength = "Content-Length: "+ dataLength + "\r\n";
- outStream.write(contentlength.getBytes());
- String alive = "Connection: Keep-Alive\r\n";
- outStream.write(alive.getBytes());
- String host = "Host: "+ url.getHost() +":"+ port +"\r\n";
- outStream.write(host.getBytes());
- //写完HTTP请求头后根据HTTP协议再写一个回车换行
- outStream.write("\r\n".getBytes());
- //把所有文本类型的实体数据发送出来
- outStream.write(textEntity.toString().getBytes());
- //把所有文件类型的实体数据发送出来
- for(FormFile uploadFile : files){
- StringBuilder fileEntity = new StringBuilder();
- fileEntity.append("--");
- fileEntity.append(BOUNDARY);
- fileEntity.append("\r\n");
- fileEntity.append("Content-Disposition: form-data;name=\""+ uploadFile.getParameterName()+"\";filename=\""+ uploadFile.getFilname() + "\"\r\n");
- fileEntity.append("Content-Type: "+ uploadFile.getContentType()+"\r\n\r\n");
- outStream.write(fileEntity.toString().getBytes());
- if(uploadFile.getInStream()!=null){
- byte[] buffer = new byte[1024];
- int len = 0;
- while((len = uploadFile.getInStream().read(buffer, 0, 1024))!=-1){
- outStream.write(buffer, 0, len);
- }
- uploadFile.getInStream().close();
- }else{
- outStream.write(uploadFile.getData(), 0, uploadFile.getData().length);
- }
- outStream.write("\r\n".getBytes());
- }
- //下面发送数据结束标志,表示数据已经结束
- outStream.write(endline.getBytes());
- BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- if(reader.readLine().indexOf("200")==-1){//读取web服务器返回的数据,判断请求码是否为200,如果不是200,代表请求失败
- return false;
- }
- outStream.flush();
- outStream.close();
- reader.close();
- socket.close();
- return true;
- }
- /**
- * 提交数据到服务器
- * @param path 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,你可以使用http://www.xxx.cn或http://192.168.1.10:8080这样的路径测试)
- * @param params 请求参数 key为参数名,value为参数值
- * @param file 上传文件
- */
- public static boolean post(String path, Map<String, String> params, FormFile file) throws Exception{
- return post(path, params, new FormFile[]{file});
- }
在清单文件中加上网络访问权限
<!-- 访问internet权限 -->
<uses-permissionandroid:name="android.permission.INTERNET"/>
利用HttpURLConnection对象,我们可以从网络中获取网页数据.
URL url = newURL("http://www.sohu.com");
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5*1000);//设置连接超时
conn.setRequestMethod(“GET”);//以get方式发起请求
if(conn.getResponseCode() != 200) throw new RuntimeException("请求url失败");
InputStream is =conn.getInputStream();//得到网络返回的输入流
Stringresult = readData(is, "GBK");
conn.disconnect();
//第一个参数为输入流,第二个参数为字符集编码
public static StringreadData(InputStream inSream, String charsetName) throws Exception{
ByteArrayOutputStreamoutStream = new ByteArrayOutputStream();
byte[]buffer = new byte[1024];
intlen = -1;
while((len = inSream.read(buffer)) != -1 ){
outStream.write(buffer,0, len);
}
byte[]data = outStream.toByteArray();
outStream.close();
inSream.close();
returnnew String(data, charsetName);
}
利用HttpURLConnection对象,我们可以从网络中获取文件数据.
URL url = newURL("http://photocdn.sohu.com/20100125/Img269812337.jpg");
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5*1000);
conn.setRequestMethod("GET");
if(conn.getResponseCode() != 200) throw new RuntimeException("请求url失败");
InputStream is =conn.getInputStream();
readAsFile(is,"Img269812337.jpg");
public static voidreadAsFile(InputStream inSream, File file) throws Exception{
FileOutputStreamoutStream = new FileOutputStream(file);
byte[]buffer = new byte[1024];
intlen = -1;
while((len = inSream.read(buffer)) != -1 ){
outStream.write(buffer,0, len);
}
outStream.close();
inSream.close();
}
1. 在res/drawable目录下添加一个xml文件,用来描述Button在不同状态下对应的不同图片。我这里给该xml文件命名为btn_background.xml
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/btn_pressed"
/>
<!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/btn_normal"
/>
<!-- focused -->
<item android:drawable="@drawable/btn_normal"
/>
<!-- default -->
</selector>
2. 在res/layout目录下,对应的layout xml文件中,将Button的android:background属性设置为btn_background即可。
<?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"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/btn_background"
/>
</LinearLayout>
3.运行结果
默认状态(unselected)
点击状态(pressed)
- Android中8个常用的操作
- android 中常用的13个服务
- android 中常用操作
- Android中常用的位图操作
- Android中常用的位图操作
- Android中常用的位图操作
- android中图片操作的常用方法
- Android中常用的位图操作
- Android中常用的位图操作
- Android开发中常用的Activity操作
- Android中数据库的常用操作
- Android中数据库的常用操作
- 14个Xcode中常用的快捷键操作
- 14个Xcode中常用的快捷键操作
- 14个Xcode中常用的快捷键操作
- 14个Xcode中常用的快捷键操作
- 14个Xcode中常用的快捷键操作
- 14个Xcode中常用的快捷键操作
- 如何阻止Unity3D把脚本自动添加到Component菜单中
- Angularjs $http服务的两个request安全问题
- 用经济学的观点生活
- 关于SercueCRT的配置问题-相同linux环境下不需要重新配置
- OCP 1Z0 053 137
- Android中8个常用的操作
- c++效率浅析
- getResource中文或有空格路径处理
- Session的生命周期
- 网络棋牌游戏成为网游主流力量
- 澤風大過
- html练习(4)
- Servicing stations +uva+回溯+剪枝
- 数据指导手游运营