当前位置:  编程技术>移动开发
本页文章导读:
    ▪java读取网络下的图片并保存到本地,图片文件名不变        java读取网络上的图片并保存到本地,图片文件名不变 import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileOutputStream; import java.net.HttpURLConnection; import java.net.URL; public class Getpic{ pub.........
    ▪ ContentProvider的兑现        ContentProvider的实现 这几天有些忙,要做关于访问exchange服务器的技术调研,环境总出问题。微软的东西还真复杂!看了看android2.2的源码,本来想写点东西,但想想也没什么好写的。主要是关.........
    ▪ 换肤兑现思路(二)       换肤实现思路(二) 以前写过一个关于皮肤的换肤思路的博客。但那个里边主要是针对于资源换肤,没有布局换肤的概念。今天实现了一个可以更换布局的换肤实现。   思路还是上篇文章的思.........

[1]java读取网络下的图片并保存到本地,图片文件名不变
    来源: 互联网  发布时间: 2014-02-18
java读取网络上的图片并保存到本地,图片文件名不变
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class Getpic{
  public Getpic(){
  }

  public static boolean saveUrlAs(String fileUrl, String savePath)/*fileUrl网络资源地址*/
  {

  try
  {
  URL url = new URL(/blog_article/fileUrl/index.html);/*将网络资源地址传给,即赋值给url*/
  /*此为联系获得网络资源的固定格式用法,以便后面的in变量获得url截取网络资源的输入流*/
  HttpURLConnection connection = (HttpURLConnection)url.openConnection();
  DataInputStream in = new DataInputStream(connection.getInputStream());
  /*此处也可用BufferedInputStream与BufferedOutputStream*/
  DataOutputStream out = new DataOutputStream(new FileOutputStream(savePath));
  /*将参数savePath,即将截取的图片的存储在本地地址赋值给out输出流所指定的地址*/
  byte[] buffer = new byte[4096];
  int count = 0;
  while ((count = in.read(buffer)) > 0)/*将输入流以字节的形式读取并写入buffer中*/
  {
  out.write(buffer, 0, count);
  }
  out.close();/*后面三行为关闭输入输出流以及网络资源的固定格式*/
  in.close();
  connection.disconnect();
  return true;/*网络资源截取并存储本地成功返回true*/

  }
  catch (Exception e)
  {
  System.out.println(e + fileUrl + savePath);
  return false;
  }
  }

  public static void main(String[] args)
  {
  Getpic pic = new Getpic();/*创建实例*/
  String photoUrl =   
http://hiphotos.baidu.com/yanshennan/pic/item/03a505c8bcbaf6557f3e6f8a.jpg";
  /*photoUrl.substring(photoUrl.lastIndexOf("/")的方法将返回最后一个符号为
  * ‘/’后photoUrl变量中的所有字符,包裹此自身符号*/
  String fileName = photoUrl.substring(photoUrl.lastIndexOf("/"));
  String filePath = "E:";
  /*调用函数,并且进行传参*/
  boolean flag = pic.saveUrlAs(photoUrl, filePath + fileName);
  System.out.println("Run ok!\n Get URL file " + flag);
  System.out.println(filePath);
  System.out.println(fileName);
  }

}

 


    
[2] ContentProvider的兑现
    来源: 互联网  发布时间: 2014-02-18
ContentProvider的实现

这几天有些忙,要做关于访问exchange服务器的技术调研,环境总出问题。微软的东西还真复杂!看了看android2.2的源码,本来想写点东西,但想想也没什么好写的。主要是关于软键盘事件的传递,网上有很多这方面的文章。今天看了看contentprovider,就写点这方面的东西吧。

 

android为我们提供了ContentProvider来实现数据的共享,一个程序如果想让别的程序可以操作自己的数据,就定义自己的ContentProvider。今天就简单介绍一它的实现方法。换肤可能会用到。

 

第一步:继承ContentProvider,代码如下:

package com.test.android.skin.main;

import java.util.List;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.util.Log;

public class Provider extends ContentProvider{

	private SQLiteOpenHelper helper;
	
	@Override
	public boolean onCreate() {
		helper = new SqLHelper(this.getContext());
		return false;
	}

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		List<String> paths = uri.getPathSegments();
		String tableName = paths.get(0);
		SQLiteDatabase db = helper.getReadableDatabase();
		return db.query(tableName, null, null, null, null, null, null);
	}

	@Override
	public String getType(Uri uri) {
		return null;
	}

	@Override
	public Uri insert(Uri uri, ContentValues values) {
		List<String> paths = uri.getPathSegments();
		String tableName = paths.get(0);
		Log.d("Tag",tableName + ":::"+uri.toString());
		SQLiteDatabase db = helper.getWritableDatabase();
		db.insert(tableName, null, values);
		return uri;
	}

	@Override
	public int delete(Uri uri, String selection, String[] selectionArgs) {
		return 0;
	}

	@Override
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {
		return 0;
	}

}

 

 

第二部:在AndroidManifest.xml添加provider

<provider android:authorities="com.test.android.skin.main.provider" android:name="Provider"></provider>

 

以上就做完一个provider了。

 

使用方式:

package com.test.android.skin.myskin;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ContentResolver resolver = this.getContentResolver();
        Uri url = Uri.parse("content://com.test.android.skin.main.provider/skinTab");
        ContentValues values = new ContentValues();
        values.put("id", "40");
        values.put("packname", "org.yangzc.package40");
        resolver.insert(url, values);

        Uri queryurl = Uri.parse("content://com.test.android.skin.main.provider/skinTab");
        Cursor c = resolver.query(queryurl, null, null, null, null);
        while(c.moveToNext()){
        	String id = c.getString(c.getColumnIndex("id"));
        	String packname = c.getString(c.getColumnIndex("packname"));
        	Log.d("Tag", "Id:"+id + "   packname:" + packname);
        }
    }
}

 


    
[3] 换肤兑现思路(二)
    来源: 互联网  发布时间: 2014-02-18
换肤实现思路(二)

以前写过一个关于皮肤的换肤思路的博客。但那个里边主要是针对于资源换肤,没有布局换肤的概念。今天实现了一个可以更换布局的换肤实现。

 

思路还是上篇文章的思路,只是做了一个简单的实现。

 

代码如下:

package com.test.android.skin.main;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView((View)getResource("main", "layout"));
		Button btn = (Button) findViewById(R.id.btn);
		btn.setBackgroundDrawable((Drawable) getResource("btn_background", "drawable"));
		
		SqLHelper helper = new SqLHelper(this);
		SQLiteDatabase db = helper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("id", "3");
		values.put("packname", "org.yangzc.package3");
		db.insert("skinTab", null, values);
		db.close();
		
		db = helper.getWritableDatabase();
		Cursor c = db.rawQuery("select * from skinTab", null);
        while(c.moveToNext()){
        	String id = c.getString(c.getColumnIndex("id"));
        	String packname = c.getString(c.getColumnIndex("packname"));
        	Log.d("Tag", "Id:"+id + "   packname:" + packname);
        }
	}
	
	private Object getResource(String filename, String defType){
		Context myContext = null;
		try {
			myContext = this.createPackageContext(
					"com.test.android.skin.myskin",
					Context.CONTEXT_IGNORE_SECURITY);
			int id = myContext.getResources().getIdentifier(filename, defType, myContext.getPackageName());
			if("drawable".equals(defType)){
				return myContext.getResources().getDrawable(id);
			}else if("layout".equals(defType)){
				LayoutInflater inflater = (LayoutInflater) myContext.getSystemService(LAYOUT_INFLATER_SERVICE);
				return inflater.inflate(id, null);
			}
		} catch (NameNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}

	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		super.onRestoreInstanceState(savedInstanceState);
	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);
	}
}

 

 

方向一:

这几天看了一下源码,主要是关于Context的东西。理想化的情况是,进入activity之后首先改一下context,这样之后框架就会动态实现换肤功能。追到了ContextThemeWrapper类,本来看到了attachBaseContext方法,以为OK了呢。看到一下代码郁闷了。继续看...

protected void attachBaseContext(Context base) {
        if (mBase != null) {
            throw new IllegalStateException("Base context already set");
        }
        mBase = base;
    }

 

 

 

 

 

1 楼 bluky999 2011-08-19  
看了LZ的博客, 是在做XMPP相关的项目吧? 服务器和android app客户端?  莫非也是IM ?语音短信?米聊?

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
数据库 iis7站长之家
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3