首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

Android GIS开发系列-- 入门季(8) Json与Geometry的相互转换

在Android中json数据十分普遍,也很实用,在Arcgis中也同样支持Json数据,Json与Geometry可以相互转换,达到我们想要的数据。 一、Geometry转换成Json数据 这个实现十分简单,比如我们将一个点转换为Json,这时也同样用到GeometryEngine这个强大的类。 Point point = new Point(113, 23); String json = GeometryEngine.geometryToJson(SpatialReference.create(SpatialReference.WKID_WGS84), point); Log.w("TAG", "json===" + json); 打印Log的结果为json==={"x":113.0,"y":23.0,"spatialReference":{"wkid":4326}},是不是很简单。 二、Json转换为Geometry 同样用到GeometryEngine类中的jsonToGeometry方法,我们将上面的json再转换回去。 try { String jsonStr = "{\"x\":113.0,\"y\":23.0,\"spatialReference\":{\"wkid\":4326}}"; JsonFactory jsonFactory = new JsonFactory(); JsonParser jsonParser = jsonFactory.createJsonParser(jsonStr); MapGeometry mapGeometry = GeometryEngine.jsonToGeometry(jsonParser); Point mPoint = (Point) mapGeometry.getGeometry(); Log.i("TAG","mPoint---"+mPoint.getX()+"==="+mPoint.getY()); } catch (IOException e) { e.printStackTrace(); } 代码执行结果mPoint---113.0===23.0。注:jsonFactory.createJsonParser这个方法可带入的参数也是比较多的,比如:file、outputStream、byte数组等等,有兴趣的小伙伴可以研究研究。 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接http://www.cnblogs.com/arxive/p/7751932.html :,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android开发 AIDL使用自定义对象作参数或返回值

http://www.pocketdigi.com/20121129/952.html 默认,AIDL支持对象作参数,但需要该对象实现Parcelable接口,且aidl文件应该是该类在同一包下,需要单独给该类定义一个aidl文件. 定义模型类: EnglishItem.java: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 package com.pocketdigi.english.aidl; import android.os.Parcel; import android.os.Parcelable; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; import com.pocketdigi.english.utils.Constants; import com.pocketdigi.english.utils.Des; @DatabaseTable(tableName = "listenlist") public class EnglishItem implements Parcelable { /** * */ private static final long serialVersionUID = -1756522544697525757L; @DatabaseField(id = true) private int id; @DatabaseField private String title; @DatabaseField private String category; @DatabaseField private String mp3url; @DatabaseField private String lrcurl; @DatabaseField private String txturl; public static final Parcelable.Creator<EnglishItem> CREATOR = new Parcelable.Creator<EnglishItem>() { public EnglishItem createFromParcel(Parcel in) { return new EnglishItem(in); } public EnglishItem[] newArray(int size) { return new EnglishItem[size]; } }; private EnglishItem(Parcel in) { readFromParcel(in); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public String getMp3url() { return Des.decodeValue(Constants.DES_KEY, mp3url); } public void setMp3url(String mp3url) { this.mp3url = mp3url; } public String getLrcurl() { return Des.decodeValue(Constants.DES_KEY, lrcurl); } public void setLrcurl(String lrcurl) { this.lrcurl = lrcurl; } public String getTxturl() { return Des.decodeValue(Constants.DES_KEY, txturl); } public void setTxturl(String txturl) { this.txturl = txturl; } @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel out, int flag) { // TODO Auto-generated method stub out.writeInt(id); out.writeString(title); out.writeString(category); out.writeString(mp3url); out.writeString(lrcurl); out.writeString(txturl); } /** * 读 * @param in */ public void readFromParcel(Parcel in) { id=in.readInt(); title=in.readString(); category=in.readString(); category=in.readString(); lrcurl=in.readString(); txturl=in.readString(); } } Parcelable.Creator不可少。 同包下定义一个EnglishItem.aidl: 1 2 package com.pocketdigi.english.aidl; parcelable EnglishItem; 最后是调用接口aidl: PlayerAidl.aidl: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package com.pocketdigi.english.aidl; import com.pocketdigi.english.aidl.EnglishItem; interface PlayerAidl { /** *传入列表 **/ void putList(inout List<EnglishItem> item); /** *播放指定音频 **/ void play(int index); void pause(); /** *暂停后恢复播放 **/ void resume(); /** *删除指定项 **/ void delete(int position); /** *停止服务 **/ void stopService(); } 分类: android solve 本文转自wanqi博客园博客,原文链接:http://www.cnblogs.com/wanqieddy/p/3922846.html如需转载请自行联系原作者

优秀的个人博客,低调大师

iOS开发那些事-iOS应用本地化-文本信息本地化

文本信息本地化在本地化工作中占有很大的比例。包括了:应用名称本地化、系统按钮和信息本地化,以及静态文本信息本地化。 系统按钮和信息本地化 还记得天气预报应用背后的“完成”按钮吗,它在中文环境下是“完成”,在英语环境下是“Done”。 还有一些系统给我们的提示信息,连接蓝牙设备时的系统提示。它在中文环境下是中文提示,在英语环境下是英文提示。 系统按钮上的文本和系统提示信息的文字我们都是不能修改的,但是如果我们不进行本地化的设置,即便是这些基本信息也一直都是英文显示。我们可以尝试在故事板中创建画面,在导航栏中放置两个系统按钮Done和Edit。然后分别在英文和中文环境下运行看看是否有变化。 事实上,它们一直都没有变化,这是什么原因?原因在于我们没有对工程本进行地化设置,打开工程中的PROJECT选择L10N,点击Localizations下面“+”,弹出菜单选择“Chinese(zh-Hans)”,这样就添加了简体中文本地化文件。 这样我们的工程就同时支持中文和英文的本地化了,系统按钮和提示信息等也都已经实现本地化了,这个过程不需要编写代码。 应用名称本地化 应用程序名称本地化是一个很重要的问题,左图是中文语言环境下的iPod touch桌面,右图是英文语言环境下的iPod touch桌面。我们会看到日历、地图、股市等几个应用名称都有本地化。 我们要编写一个应用它的英文名是:“Localization”,中文名是:“本地化”。打开工程L10N应用,找到工程中的L10N-Info.plist文件,该文件是工程属性文件,应用程序名称就是在这个文件中定义的,但是我们不能在这里本地化,要想本地化必须借助于另一个文件InfoPlist.strings,InfoPlist.strings是可以本地化的。在上一节系统按钮和信息本地化后,InfoPlist.strings下面会有两个文件:InfoPlist.strings(English)和InfoPlist.strings(Chinese)。打开Finder看到en.lproj和zh-Hans.lproj,它们的目录结构如下: ├── en.lproj │ ├── InfoPlist.strings │ └── MainStoryboard.storyboard └── zh-Hans.lproj ├── InfoPlist.strings └── MainStoryboard.storyboard CFBundleDisplayName和CFBundleName的键能够配置应用名字,CFBundleDisplayName键配置应用显示的名字。CFBundleName配置应用短名字,不超过16字符,显示菜单栏和应用窗口信息中。 InfoPlist.strings(Chinese)文件的内容如下: CFBundleDisplayName="本地化"; CFBundleName="本地化"; InfoPlist.strings(English)文件的内容如下: CFBundleDisplayName="Localization"; CFBundleName="L10N"; 运行结果,图标下文字显示的是CFBundleDisplayName键配置的名字。 程序代码输出的静态文本本地化 应用中的静态文本都应该实现本地化,但是它们可能是通过程序代码输出,也可能是通过IB在nib或故事板设计输出的。采用“Tabbed Application”工程模板创建的标签应用程序,它的两个标签上的标题First和Second,以及画面中的文字都属于静态文本。 同样都是这个工程如果在创建过程中分别创建基于故事板和nib技术的两个版本,故事板版本的两个标签上的标题是通过IB在编写在故事板文件中的(关于故事板和nib中静态文本的本地化我们会在下一节介绍)。但在nib版本中两个标签上的标题通过程序代码输出的。FirstViewController.m中的构造方法: - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { self.title = NSLocalizedString(@"First", @"First"); self.tabBarItem.image = [UIImage imageNamed:@"first"]; } return self; } SecondViewController.m中的构造方法: - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { self.title = NSLocalizedString(@"Second", @"Second"); self.tabBarItem.image = [UIImage imageNamed:@"second"]; } return self; } 在这个两个构造方法中设置标题属性的时候使用了NSLocalizedString宏,NSLocalizedString宏本质上是调用NSBundle的localizedStringForKey:value:table:方法,NSLocalizedString是从默认字符串资源文件(Localizable.strings)中取出本地化的字符串。 字符串资源文件默认命名为Localizable.strings,文件采用UTF-16编码。如果静态文本不是很多可以自己创建Localizable.strings文件。选择“Supporting Files”组,打开菜单File→New→File…,选择iOS→Resource→String File,输入文件名“Localizable.strings”。 选择文件Localizable.strings打开文件显示检查器,点击Localization中的“Make localized”按钮,这可以帮助我们创建本地化的Localizable.strings文件。 点击“Make localized”按钮弹出一个选择本地化语言的对话框。我们可以选择English,然后点击Localize按钮。 然后再按照事实上,添加简体中文本地化文件 英文版中Localizable.strings文件中添加内容: /* First */ "First" = "First"; /* Second */ "Second" = "Second"; 中文版中Localizable.strings文件中添加内容: /* First */ "First" = "第一"; /* Second */ "Second" = "第二"; 使用genstring工具 但是有的时候字符串很多,提取和编写起来很麻烦,此时我们可以借助于命令行工具genstring,从m或mm文件中扫描下面宏,并取出字符串输出到本地化文件中。 CFCopyLocalizedString CFCopyLocalizedStringFromTable CFCopyLocalizedStringFromTableInBundle CFCopyLocalizedStringWithDefaultValue NSLocalizedString NSLocalizedStringFromTable NSLocalizedStringFromTableInBundle NSLocalizedStringWithDefaultValue CF开头宏和NS开头宏两两对应,NS开头宏是Foundation 框架是基于Objective-C语言的,CF开头宏是Core Foundation 框架是基于c语言的。NSLocalizedStringFromTable和NSLocalizedStringFromTableInBundle函数是在自定义字符串资源文件名时使用。 下面是genstrings命名的基本语法: genstrings [-a] [-q] [-o <outputDir>] sourcefile 其中参数: -a 在存在的文件后面追加内容 -q 关闭多个键/值对的警告 -o 指定输出目录 因此如果我们想输出到en.lproj目录,则代码如下: genstrings -o en.lproj *.m 这样就在en.lproj目录下面产生了Localizable.strings文件,需要注意的是上面的命令每次运行的时候都会覆盖Localizable.strings文件,如果内容不想覆盖可以使用-a参数,然后在文件中进行修改。 本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1226421,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android联机或者模拟器单独测试Activity的辅助Activity示例开发

想起写个单独测试Activity的辅助Activity的原因是在联机测试的时候IDEA或者Android Studio中的指定运行Activity功能没法使用了。 下面付IDE中指定运行Activity的界面截图: 辅助Activity要做的事情是将辅助Activity作为启动的默认Activity,其主界面中以ListView的形式展示所有Activity,通过单击ListView的Item项来启动要测试的Activity。 1. 辅助Activity代码示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 package secondriver.app; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.ListView; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** *CreatedbyBronchoon2015/11/15. */ public class TestActivitiesActivity extends Activity implements AdapterView.OnItemClickListener{ private LinearLayoutmRootView; private ListViewmListView; private ArrayAdaptermAdapter; private List<Class>mAllActivities; @Override protected void onCreate(BundlesavedInstanceState){ super .onCreate(savedInstanceState); initView(); mAllActivities=getActivities( this , this .getPackageName(),Arrays.<Class>asList( this .getClass())); mAdapter= new ArrayAdapter( this ,android.R.layout.simple_list_item_1,android.R.id.text1,mAllActivities); mListView.setAdapter(mAdapter); mListView.setOnItemClickListener( this ); } private void initView(){ mRootView= new LinearLayout( this ); mListView= new ListView( this ); mListView.setId(android.R.id.list); mRootView.addView(mListView,ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); setContentView(mRootView); } @Override public void onItemClick(AdapterView<?>parent,Viewview, int position, long id){ Classactivity=mAllActivities.get(position); //启动指定的Activity startActivity( new Intent( this ,activity)); } /** *获取所有要测试的ActivityClass * *@paramcontext *@parampackageName *@paramexcludeActivities *@return */ public static List<Class>getActivities(Contextcontext,StringpackageName,List<Class>excludeActivities){ final StringTAG= "GET_ACTIVITY" ; List<Class>includeActivities= new ArrayList<>(); try { PackageInfopackageInfo=context.getPackageManager().getPackageInfo(packageName,PackageManager.GET_ACTIVITIES); if (packageInfo.activities!= null ){ ActivityInfo[]activityInfos=packageInfo.activities; Log.d(TAG, "Find" +activityInfos.length+ "activityinAndroidManifest.xml." ); for (ActivityInfoactivityInfo:activityInfos){ ClassactivityClass; StringactivityName=activityInfo.name; try { activityClass=Class.forName(activityName); if (Activity. class .isAssignableFrom(activityClass)){ includeActivities.add(activityClass); } } catch (ClassNotFoundExceptione){ Log.d(TAG, "Classnotfoundactivity" +activityName+ "inpackage" +packageName); } } } Log.d(TAG, "Found" +includeActivities.size()+ "activitylistis:" +Arrays.toString(includeActivities.toArray())); if ( null !=excludeActivities){ includeActivities.removeAll(excludeActivities); } Log.d(TAG, "Last" +includeActivities.size()+ "activitylistis:" +Arrays.toString(includeActivities.toArray())); } catch (PackageManager.NameNotFoundExceptione){ Log.d(TAG, "Androidsystemnotfoundpackage" +packageName); } return includeActivities; } } 在AndroidManifest.xml中讲辅助Activity设置为默认启动的Activity,之后就可以通过选择点击要启动的Activity来进行测试。该示例还可以通过添加一些代码来增强,比如启动Activity的时候可以通过输入对话框的方式携带数据至启动的Activity。测试完成后删除或者充足默认启动的Activity即可。 2. 配置AndroidManifest.xml : 1 2 3 4 5 6 7 8 < activity android:name = ".TestActivitiesActivity" > < intent-filter > < action android:name = "android.intent.action.MAIN" /> < category android:name = "android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > < activity android:name = ".OneActivity" /> < activity android:name = ".TwoActivity" /> 3. 调试日志: 1 2 3 11 - 15 20 : 07 : 31.899 10665 - 10665 /secondriver.appD/GET_ACTIVITY:Find 3 activityinAndroidManifest.xml. 11 - 15 20 : 07 : 31.899 10665 - 10665 /secondriver.appD/GET_ACTIVITY:Foundactivityhave 3 listis:[ class secondriver.app.TestActivitiesActivity, class secondriver.app.OneActivity, class secondriver.app.TwoActivity] 11 - 15 20 : 07 : 31.899 10665 - 10665 /secondriver.appD/GET_ACTIVITY:Lastactivityhave 2 listis:[ class secondriver.app.OneActivity, class secondriver.app.TwoActivity] 从日志中可以看到一共发现了3个Activity类,去除辅助的Activity,在ListView中讲显示2个Item项。 后期追加内容: 4. 结果效果图 新源码参见附件:TestActivitiesActivity.java.txt Item状态变化Drawable文件内容如下: 本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1712943,如需转载请自行联系原作者

优秀的个人博客,低调大师

Objective-C编码规范:26个方面解决iOS开发问题(转)

1 <br><a href= "http://www.csdn.net/article/2015-06-01/2824818-objective-c-style-guide/1" target= "_blank" ><span style= "font-family: verdana, Arial, Helvetica, sans-serif;" ><span style= "font-size: 14px; line-height: 21px; white-space: normal;" ><strong>链接</strong></span></span></a><br><br><br> 本文转自SharkBin博客园博客,原文链接:http://www.cnblogs.com/SharkBin/p/4991670.html,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册