当前位置:  编程技术>移动开发
本页文章导读:
    ▪MapView施用示例        MapView使用示例 一、MapView申请apiKey打开Eclipse--->Windows--->Preferences--->Android--->Build查看默认的debug keystore位置,我的是 C:\Users\wh\.android\debug.keystore 在cmd中执行keytool -list -alias androiddebu.........
    ▪ 照相机预览2.1版本一下兼容setDisplayOrientation        相机预览2.1版本一下兼容setDisplayOrientation protected void setDisplayOrientation(Camera camera, int angle){ Method downPolymorphic; try { downPolymorphic = camera.getClass().getMethod("setDisplayOrientation", new C.........
    ▪ [转]NSMutableArray中的自动释放对象让小弟我郁闷了一整天       [转]NSMutableArray中的自动释放对象让我郁闷了一整天 转自:http://w11h22j33.iteye.com/blog/1441738   在做一个TableView程序时,要在表格里显示一个文件夹内所有文件的清单,程序在一开始显示时正.........

[1]MapView施用示例
    来源: 互联网  发布时间: 2014-02-18
MapView使用示例
一、MapView申请apiKey
打开Eclipse--->Windows--->Preferences--->Android--->Build
查看默认的debug keystore位置,我的是 C:\Users\wh\.android\debug.keystore


在cmd中执行

keytool -list -alias androiddebugkey -keystore "C:\Users\wh\.android\debug.keystore" -storepass android -keypass android


双引号中的为你keystore位置

执行结果:
androiddebugkey, 2009-2-17, keyEntry,
认证指纹 (MD5): XX:XX:XX:XX:XX:XX:XX:XX.............


打开http://code.google.com/intl/zh-CN/android/maps-api-signup.html

填入你的认证指纹(MD5)即可获得apiKey了

layout中加入MapView
<com.google.android.maps.MapView
        android:id="@+id/mapview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:apiKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXX" />



二、MapView控件的使用
1.建立mapview.xml布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <com.google.android.maps.MapView
    android:id="@+id/mapView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:apiKey="0NmBYax5wIVpt1zmwv7RnvNczoF2Ftwzd9yDduA" />

    <LinearLayout
        android:id="@+id/zoomView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/mapView"
        android:layout_centerHorizontal="true" >
    </LinearLayout>
   
</RelativeLayout>

1.新建MapViewActivity继承MapActivity:
package com.willawn.androidtest.test;

import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.ZoomControls;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;

public class MapViewActivity extends MapActivity {
// 线性布局
private LinearLayout linearLayout;
// 地图视图
private MapView mapView;
// 缩放控制
private ZoomControls mZoom;

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

setContentView(R.layout.mapview);
linearLayout = (LinearLayout) findViewById(R.id.zoomView);
mapView = (MapView) findViewById(R.id.mapView);
mapView.getController().setCenter(new GeoPoint(39971036,116314659));
mapView.getController().setZoom(10);
mZoom = (ZoomControls) mapView.getZoomControls();
linearLayout.addView(mZoom);
}

@Override
protected boolean isRouteDisplayed() {
return false;
}

}


    
[2] 照相机预览2.1版本一下兼容setDisplayOrientation
    来源: 互联网  发布时间: 2014-02-18
相机预览2.1版本一下兼容setDisplayOrientation

protected void setDisplayOrientation(Camera camera, int angle){
	    Method downPolymorphic;
	    try
	    {
	        downPolymorphic = camera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class });
	        if (downPolymorphic != null)
	            downPolymorphic.invoke(camera, new Object[] { angle });
	    }
	    catch (Exception e1)
	    {
	    }
   }
 

    
[3] [转]NSMutableArray中的自动释放对象让小弟我郁闷了一整天
    来源: 互联网  发布时间: 2014-02-18
[转]NSMutableArray中的自动释放对象让我郁闷了一整天

转自:http://w11h22j33.iteye.com/blog/1441738

 

在做一个TableView程序时,要在表格里显示一个文件夹内所有文件的清单,程序在一开始显示时正常,但是一滚动窗口时就崩溃,查找这个错误整整花了我一天的时间,原来出在NSMutableArray初始化时用的方法不正确,都是因为Objective-C的基础知识没学好。

在一个UITableViewController类中声明了一个NSMutableArray *localFiles这样一个数组,作为成员变量。

在viewDidLoad方法中读出应用程序Documents目录下的所有文件名放在这个数组中,初始化时用了这个方法:

localFiles = [NSMutableArray array];    //这是自动释放的对象

然后循环调用了addObject方法,其它就没有什么特殊的操作了,程序能够显示出一个文件列表,但向上或向下滚动一点点时,程序就崩溃,显示的错误信息也相当奇怪:

[__NSArrayI addObject:]: unrecognized selector sent to instance 0x4b1b8b0

我查啊查啊,每次出错的调用栈都显示在执行到cellForRowAtIndexPath这个方法时出错,跟踪到localFiles这个变量时,在调试器上显示out of scope,这个localFiles指针里的内容不知道跑到哪里去了。

从google上查了许多资料,在这个网站的留言中查到下面一段话,顿时茅塞顿开:

It doesn't really matter. [NSMutableArray array] is a nice shortcut, but you have to remember to retain it, so the question really is a matter of [[NSMutableArray array] retain] versus [[NSMutableArray alloc] init]. I usually use the former. The real convenience comes in when you need to statically fill the array; you can do it all in one message. [[NSMutableArray arrayWithObjects:...] retain] is faster than [[NSMutableArray alloc] init] followed by numerous [NSMutableArray addObject:(id)] calls.

原来在调用array方法后得retain!或者改用[[NSMutableArray alloc] init]方法组合,试了2种修改办法果然都好用,程序再也不崩溃了。就这么几个字,害了我几乎一整天。

localFiles = [[NSMutableArray array] retain];

这一天里恶补了一些Objective-C中的内存管理知识,虽然走了一些弯路,但对AutoRelease这个术语算是有了一些认识了。

 

后来仔细看了《Objective C教程》的第9章“内存管理”,原来第9.3节“Cocoa内存管理规则”(第138页)里作者早就强调三条规则:

(1)当你使用new、alloc或copy方法创建一个对象时,该对象的引用计数器值为1。当不再使用该对象时,你要负责向该对象发送一条release或autorelease消息。这样,该对象将在其使用寿命结束时被销毁。

(2)当你通过任何其它方法获得一个对象时,则假设该对象的引用计数器值为1,而且已经被设置为自动释放,你不需要执行任何操作来确保该对象被清理。如果你打算在一段时间内拥有该对象,则需要保留(retain)它并确保在操作完成时释放它。

(3)如果你保留(retain)了某个对象,你需要(最终)释放或自动释放该对象。必须保持retain方法和release方法的使用次数相等。

我的程序是iPhone程序,为了降低程序的内存空间占用,Cocoa在GUI应用程序中规定了自动释放池的销毁时间,在程序开始处理事件之前创建一个自动释放池,并在事件处理结束后销毁该自动释放池。我的localFiles对象在开始时创建了一个自动释放对象,完成之后进行下一个事件循环,自动释放池已经销毁,localFiles对象也就被释放了,在滚动tableView时进入下一个事件循环,所以localFiles对象的内容就找不到了。


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
.net/c#/asp.net iis7站长之家
▪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