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