当前位置: 编程技术>移动开发
本页文章导读:
▪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 ?语音短信?米聊?
最新技术文章: