当前位置:  编程技术>移动开发
本页文章导读:
    ▪施用Objetive-zip读取zip文件        使用Objetive-zip读取zip文件 版权所有,欢迎转载,转载请注明 : SinFrancis  http://mdev.cc    使用Objective-zip的库读取zip文件,地址:http://code.google.com/p/objective-zip/   可以在iphone上进行运行.   简单.........
    ▪ ArrayAdapter ,SimpleAdapter ,SimpleCursorAdapter 差异        ArrayAdapter ,SimpleAdapter ,SimpleCursorAdapter 区别 数据 源不同则适配器不同 1. String[]: ArrayAdapter 2. 数据库 Cursor: SimpleCursorAdapter 3. List<Map <String,?>>: SimpleAdapter     ArrayAdapter 需要把数据放.........
    ▪ 被忽略的UI检视凶器:Hierarchy Viewer       被忽略的UI检视利器:Hierarchy Viewer Hierarchy Viewer是随AndroidSDK发布的工具,位置在tools文件夹下,名为hierarchyviewer.bat。它是Android自带的非常有用而且使用简单的工具,可以帮助我们更好地检视.........

[1]施用Objetive-zip读取zip文件
    来源: 互联网  发布时间: 2014-02-18
使用Objetive-zip读取zip文件

版权所有,欢迎转载,转载请注明 : SinFrancis  http://mdev.cc 

 

使用Objective-zip的库读取zip文件,地址:http://code.google.com/p/objective-zip/

 

可以在iphone上进行运行.

 

简单的测试代码:

 

#import <Foundation/Foundation.h>
#import "Objective-Zip/ZipFile.h"
#import "Objective-Zip/ZipException.h"
#import "Objective-Zip/FileInZipInfo.h"
int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    // insert code here...
    NSLog(@"Hello, World!");
	
	//初始化目录
	NSString *documentsDir= [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
	NSString *filePath= [documentsDir stringByAppendingPathComponent:@"5.zip"];
	//此文件在zip包中,我们就读取此文件
	NSString *f = @"META-INF/container.xml";
	
	@try {
	
	ZipFile *unzipFile= [[ZipFile alloc] initWithFileName:filePath mode:ZipFileModeUnzip];
	NSArray *infos= [unzipFile listFileInZipInfos];
		
		FileInZipInfo *currentInfo=Nil;
		
		//列出所有在zip中的文件信息
	for (FileInZipInfo *info in infos) {
		//@"- %@ %@ %d (%d)"
		NSString *fileInfo= [NSString stringWithFormat:@"%@", info.name, info.date, info.size, info.level];
		if([fileInfo isEqualToString:f]){

			NSLog(@"%@",fileInfo);		
	
			
		}
			NSLog(@"%@",fileInfo);	
				
	}
	
		//直接定位到要读取的文件
	if([unzipFile locateFileInZip:f]){
			
			//取得读取文件流
		ZipReadStream *read2= [unzipFile readCurrentFileInZip];
		currentInfo = [unzipFile getCurrentFileInZipInfo];
		
		//开始进行读取
		NSMutableData *data2= [[[NSMutableData alloc] initWithLength:currentInfo.length] autorelease];
		int bytesRead2= [read2 readDataWithBuffer:data2];
			
		NSLog(@"SIZE IS:%d,Read size is :%d",currentInfo.length,bytesRead2);
			
		NSString *fileText2= [[[NSString alloc] initWithBytes:[data2 bytes] length:bytesRead2 encoding:NSUTF8StringEncoding] autorelease];
		NSLog(@"%@",fileText2);
	
		}

		
		[unzipFile release];
	} @catch (ZipException *ze) {
		
		NSLog(@"ZipException caught: %d - %@", ze.error, [ze reason]);
		
	} @catch (id e) {
			
		NSLog(@"Exception caught: %@ - %@", [[e class] description], [e description]);
	}
	
    [pool drain];
    return 0;
}
 
1 楼 xiao0556 2010-08-21  
最近想学习IPHONE开发了,怎么样发现IPHONE开发的贴子这么少啊?为啥呢?

    
[2] ArrayAdapter ,SimpleAdapter ,SimpleCursorAdapter 差异
    来源: 互联网  发布时间: 2014-02-18
ArrayAdapter ,SimpleAdapter ,SimpleCursorAdapter 区别

数据 源不同则适配器不同
1. String[]: ArrayAdapter

2. 数据库 Cursor: SimpleCursorAdapter
3. List<Map <String,?>>: SimpleAdapter

 

 

ArrayAdapter 需要把数据放入一个数组以便显示;

android .R.layout.simple_list_item_1是系统 定义 好的布局文件 只显示一行文字

 

SimpleCursorAdapter 是和数据库有关的东西,而sqlite数据库所要求的 自动 增长的 id  必须是 _id这中形式

 

SimpleAdapter 能定义各种各样的布局出来,可以放上ImageView (图片),还可以放上Button(按钮),CheckBox(复选框)

 

public class List1 extends  Activity {   
   
    private ListVeiw listView;   
    @Override  
    public void onCreate(Bundle savedInstanceState) {   
   super.onCreate(savedInstanceState);   
   
       listView=new ListVeiw(this);   
       listView.setAdapter(new ArrayAdapter<String>(this,   
           android.R.layout.simple_list_item_1, mStrings));   
      setContentVieww(listView);   
        }   
   
   private String[] mStrings = {   
           "Abbaye de Belloc", "Abbaye du Mont des Cats",      
           "Acorn", "Adelost", "Affidelice au Chablis",   
           "Aisy Cendre", "Allgauer Emmentaler", "Alverca",   
           "Ami du Chambertin", "Anejo Enchilado", "Anneau   
           "Aragon", "Ardi Gasna", "Ardrahan", "Armenian   
           "Asadero", "Asiago", "Aubisque Pyrenees", "Autun",   
            "Babybel", "Baguette Laonnaise", "Bakers", "Bal"};   
}
 
public class List2 extends Activity {   
      
    private ListView listView;   
    @Override  
    protected void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
   
        listView=new ListView(this);   
       Cursorc=getContentResolver().query(People.CONTENT_URI,   
       null, null, null, null);         
        startManagingCursor(c);   
   
        ListAdapter adapter = new SimpleCursorAdapter(this,   
                 android.R.layout.simple_list_item_1,   
                 c,   
                 new String[] {People.NAME} ,   
                 new int[] {android.R.id.text1});   
        listView.setAdapter(adapter);   
setContentView(listView);   
}   
}  
 
public class List3 extends ListActivity {   
      
    List<Map<String, Object>> list;   
   
    @Override  
    public void onCreate(Bundle savedInstanceState) {   
       super.onCreate(savedInstanceState);   
         
       list = getListForSimpleAdapter(); //list为数据集合
   
       SimpleAdapter     adapter = new SimpleAdapter(this, list,   
R.layout.item,   
       new String[] { "BigText", "LittleText", "img" },   
new int[] { R.id.BigText,R.id.LittleText, R.id.img });  

        //可以想成把一个放好数据的布局文件放入本界面中   
       setListAdapter(adapter);      
   
    }   
   
    private List<Map<String, Object>> getListForSimpleAdapter() {   
    List<Map<String,Object>> list=newArrayList<Map<String,        Object>>(3);   
           Map<String, Object> map = new HashMap<String, Object>();   
           map.put("BigText", "Android");   
           map.put("LittleText", "Google phone.");   
           map.put("img", R.drawable.n);   
           list.add(map);   
   
           map = new HashMap<String, Object>();   
           map.put("BigText", "Lenovo");   
           map.put("LittleText", "Ophone");   
           map.put("img", R.drawable.o);   
           list.add(map);   
   
           map = new HashMap<String, Object>();   
           map.put("BigText", "Droid");   
           map.put("LittleText", "Motorola");   
           map.put("img", R.drawable.droid);   
           list.add(map);   
   
         
       return list;   
    }   
}   

 

ps: 继承BaseAdapter编写适合自己的adapter 更灵活


    
[3] 被忽略的UI检视凶器:Hierarchy Viewer
    来源: 互联网  发布时间: 2014-02-18
被忽略的UI检视利器:Hierarchy Viewer

Hierarchy Viewer是随AndroidSDK发布的工具,位置在tools文件夹下,名为hierarchyviewer.bat。它是Android自带的非常有用而且使用简单的工具,可以帮助我们更好地检视和设计用户界面(UI),绝对是UI检视的利器,但是好像很少有人提它,难道是因为太简单?



具体来说主要功能有2个:

1.       从可视化的角度直观地获得UI布局设计结构和各种属性的信息,帮助我们优化布局设计;

2.       结合debug帮助观察特定的UI对象进行invalidate和requestLayout操作的过程。



1.       基本使用方法

(1)hierarchyviewer的使用非常简单,启动模拟器或者连接上真机后,启动hierarchyviewer.bat,会看到下面的界面,Devices里列出了可以观察的设备,Windows里列出的是当前选中的设备的可以用来显示View结构的Window:

 

     选中某个想要观察的Window,比如上面列出的com.android.launcher/com.android.launcher.Launcher项,然后点击菜单栏的Load View Hierarchy,就进入Layout View,由于要解析相关Window,所以这个过程要几秒钟,左边列出的是当前窗口的树型布局结构图,右边列出的是当前选中的某个子View的属性信息和在窗口中的位置:

 

    需要注意的是:Layout View列出的View结构是从视图的根节点开始的,比如针对Launcher使用的layout,它的底层基础布局DragLayer实际上是放在一个FrameLayout里的,该FrameLayout又是被PhoneWindow的DecorView管理的。



(2)点击界面左下角类似九宫格的按钮,就进入了Android称之为Pixel Perfect View的界面,这个界面里主要是从细节上观察UI效果:



      左边是浏览视图,中间是全局的视图,右边是当前关注的地方的细节放大,是像素级别的,对于观察细节非常有用。

Refresh Rate用来控制View多久从模拟器或者真机上更新一次视图数据。

Zoom就是放大局部细节用的,细节显示在最右边的视图上。

Overlay比较有意思,主要用来测试在当前视图上加载新的图片后的效果,点击Load…选择图片后,可以控制在当前界面上显示的透明读,滑动0%~100%的控件即可。如果选择了Show in Loupe,右侧的放大视图也会将加载的图片的细节结合着透明度显示出来。不过目前这个Overlay做的比较简单,合成的图只能从界面的左下角为原点画出来,不能移动。





(3)在Layout View中,选中一个view的图示,点击工具栏的Display View,就可以看到这个view的实际显示效果,可以点选Show Extras,这个功能也比较实用,可以显示出该View中不同元素显示的边界,帮助我们检查是否正确。





2.       Hierarchyviewer的invalidate和requestLayout功能

对于Android的UI来说,invalidate和requestLayout是最重要的过程,Hierarchyviewer提供了帮助我们Debug特定的UI执行invalidate和requestLayout过程的途径,方法很简单,只要选择希望执行这两种操作的View点击按钮就可以。当然,我们需要在例如onMeasure()这样的方法中打上断点。这个功能对于UI组件是自定义的非常有用,可以帮助单独观察相关界面显示逻辑是否正确。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ddna/archive/2010/04/25/5527072.aspx

 


    
最新技术文章:
▪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提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


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

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

浙ICP备11055608号-3