最近的android项目开发问题总结

2024-09-03 02:32

本文主要是介绍最近的android项目开发问题总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

安卓开发还是有碰到很多的问题,然后只有通过项目开发才能提升一些经验,感觉2年前学校里的东西还是学的不少,真正用到的并不是那么多,四大组件其实也就activity采用的多点,其他的三大组件在项目中并不是很常用,但是面试的时候有可能问到,所以我们呢还不得不学这些东西,写code是一个什么样的过程,我现在也说不出来,反正年轻还是多学点咯大笑

1、android通过get方式传递中文参数到java web服务器出现乱码

解决方法:

android使用URLEncoder编码

String str = URLEncoder.encode(str ,"UTF-8");

如果你用的是http请求数据的话,那么最好在设置请求参数时这样

request.setEntity(new UrlEncodedFormEntity(nameValuePairs,
     HTTP.UTF_8));

java web端使用

String str =request.getParameter("str");
str= new String(str.getBytes("ISO8859-1"),"UTF-8");//ISO8859-1这种编码在网页里你不得不防

2、android点击listview的item项没反应(3种处理的方式)

如listView.setOnItemClickListener(new OnItemClickListener(){public void onItemClick(AdapterView<?> parent, View view,
        int position, long id){viewItemDetail(position);
        }});

错误原因:listview,grideView的元素里不能包括button、imageButton这些点击事件按钮,因为这些按钮性质的控件把整个item的焦点抢去了,然后基于事件分发的机制使整个item的ontuch都不在响应

解决方式:(1)把button、imageButton换成imageView获者textView就ok了,(2)如果你是使用的baseAdapter的话也可以在getView方法里对convertView添加onclick事件,那么这个焦点是不会失效的,把postion改成final的,就能知道响应的具体是那个item,如果listView是自定义的只需把事件分发返回false.((3)ListViewItem有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中了,也就会响应onItemClickListener中的onItemClick()方法,然而将ListView的Item Layout的子控件focusable属性设置为false有点繁琐,我们可以通过对Item Layout的根控件设置其android:descendantFocusability=”blocksDescendants”即可,这样Item Layout就屏蔽了所有子控件获取Focus的权限,不需要针对Item Layout中的每一个控件重新设置focusable属性了,如此就可以顺利的响应onItemClickListener中的onItemClick()方法了。所以总结一下,最简单的解决方法就是在ListView的Item选项的布局文件根上android:descendantFocusability=”blocksDescendants”就可以了。

3、在两个Activity跳转时,由于第二个Activity在启动时加载了较多数据,就会在启动之前出现一个短暂的黑屏时间,解决这个问题比较简单的处理方法是将第二个Activity的主题设置成透明的,这样在启动第二个Activity时的黑屏就变成了显示第一个Activity界面。这个分两步完成:

第一步:xxx/res/values/styles.xml中加入自定义Activity的Theme,如下所示:
<style name="Transparent" parent="android:Theme.Light">
<!--将Activity的Theme设置成透明-->
<item name="android:windowIsTranslucent">true</item>
</style>
<style name="Transparent" parent="android:Theme.Light">
<!--将Activity的Theme设置成透明-->
<item name="android:windowIsTranslucent">true</item>
</style>第二步:在AndroidManifest.xml中将第二个Activity的"android:theme"属性设置成刚才自定义的主题样式。如下所示:

<activity
android:name=".CustomerActivity"
        android:label="@string/app_name"
        android:theme="@style/Transparent"> 到此应该就不会出现那个讨厌的黑屏了。

4 .android webview开发html5

在android使用webview开发Html5时,html5使用了缓存,需要配置webview开启

// 设置可以使用localStorage
myWebView.getSettings().setDomStorageEnabled(true);
        android webview开发html5之开启AppCache
// 应用可以有数据库
        myWebView.getSettings().setDatabaseEnabled(true);
        String databasePath = this.getApplicationContext().getDir(“database”, Context.MODE_PRIVATE).getPath();
        myWebView.getSettings().setDatabasePath(databasePath);
// 应用可以有缓存
        myWebView.getSettings().setAppCacheEnabled(true);
        String appCaceDir =this.getApplicationContext().getDir(“cache”, Context.MODE_PRIVATE).getPath();
        myWebView.getSettings().setAppCachePath(appCaceDir);
        myWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onExceededDatabaseQuota(String url,
        String databaseIdentifier, long quota,
        long estimatedDatabaseSize, long totalQuota,
        QuotaUpdater quotaUpdater) {quotaUpdater.updateQuota(5 * 1024 * 1024);
        }});

WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源)、H5缓存(即appcache)。

1、缓存构成
根据setAppCachePath(String appCachePath)提供的路径,在H5使用缓存过程中生成的缓存文件。

2、缓存模式
无模式选择,通过setAppCacheEnabled(boolean flag)设置是否打开。默认关闭,即,H5的缓存无法使用。

3、清除缓存
找到调用setAppCachePath(String appCachePath)设置缓存的路径,把它下面的文件全部删除就OK了。

4、控制大小
通过setAppCacheMaxSize(long appCacheMaxSize)设置缓存最大容量,默认为Max Integer。
同时,可能通过覆盖WebChromeClient.onReachedMaxAppCacheSize(long requiredStorage, long quota, WebStorage.QuotaUpdater quotaUpdater)来设置缓存超过先前设置的最大容量时的策略。

webview具体使用:

// 设置支持JavaScript等
mWebSettings = mWebView.getSettings();
        mWebSettings.setJavaScriptEnabled(true);
        mWebSettings.setBuiltInZoomControls(true);
        mWebSettings.setLightTouchEnabled(true);
        mWebSettings.setSupportZoom(true);
        mWebView.setHapticFeedbackEnabled(false);
        mWebSettings.setJavaScriptEnabled(true);
        mWebSettings.setSupportZoom(true);// 网页缩放
        mWebSettings.setBuiltInZoomControls(true);
        mWebSettings.setDefaultZoom(ZoomDensity.CLOSE);// 默认缩放模式
        mWebView.setInitialScale(100);
        // mWebView.loadDataWithBaseURL("file:///android_asset/", html,
        // mimeType,
        // encoding, "");
        mWebView.loadUrl(www.baidu.com);

如果用webview点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个浏览器会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。

覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。

Android的webView很强大,其实就是一个浏览器,你可以把它嵌入到你想要的位置,我这里遇到两个问题,就是怎么知道网页的加载进度和加载网页时,点击网页里面的链接还是在当前的webview里跳转,不想跳到浏览器那边,解决办法如下:

//此方法可以处理webview 在加载时和加载完成时一些操作      
webView.setWebChromeClient(new WebChromeClient(){}
@Override
public void onProgressChanged(WebView view, int newProgress) {if(newProgress==100){// 这里是设置activity的标题, 也可以根据自己的需求做一些其他的操作       
        title.setText(“加载完成”);}else{title.setText(“加载中…….”);
        }}       });
        webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {//重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边       
        view.loadUrl(url);
        return true;
        }
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError error) {// 重写此方法可以让webview处理https请求       handler.proceed();       
        }});
        }}

5 判断网络状态时
一般都会忘记加权限的问题,所以莫名的就程序崩溃了,一般都是加了联网的权限就忘记其他的了
    <!-- 获得网络 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
6. 遇到下划线,中划线链接,上标下标气泡和moji表情的操作
你还在为这些东西困恼吗,当你遇到下划线你可能首先想到的是富文本吧,或者from.html();现在你可以用这个东西了,或许你了解的不是很多吧,那么我建议你使用一下spannablestring和ImageSpan这两个类,让你图文结合,想多美观就多美观还便于操作,再也不用通过写style来改变了,下面是spannableString的一些属性,你是否找到了你想要的效果呢
而开发表情的输入最简便的方法就是使用ImageSpan,真正实现文字对应图片,节省了不少的代码。
7.Android 百度地图开发问题----解决地图有时候加载不出来问题
相信很多人在开发百度地图的时候会出现百度地图有时候会加载不出来,只显示网格图。 这个问题究其原因就是申请百度key的时候填写的SHA1也就是指纹证书有问题。估计很多开发者都是照着百度开放平台上介绍的流程去申请的。

当然,照着百度开放平台上去申请是没错的。但是上面介绍的申请得到的指纹证书只是本地开发环境存在的默认签名文件debug.keystore的指纹证书。流程如下:

第一步:打开命令窗口,输入cd .android。(这一步说明开发环境默认的签名证书debug.keystore存放在C盘.android目录中)

第二步:进入.android目录后,接着输入keytool -list -v -keystore debug.keystore,这里的debug.keystore就是开发环境下默认的签名文件了。

值得注意的是:我们在开发一个apk发布在应用商店时,需要我们自己的生成的签名文件,这个签名文件和开发环境默认的签名文件肯定是不同的,至少指纹证书SHA1就不同。所以,当我们通过我们自己生成的签名文件导出签名的apk时,百度地图的key应该是我们自己的签名文件中的指纹证书,如果还是用的是debug.keystore的SHA1申请的key,百度地图自然就会有问题。比如,我们导出apk的签名文件名字为myapp.keystore;那么可以通过在命令窗口中输入keytool -list -v -keystore myapp.keystore得到SHA1,然后通过这个SHA1去申请百度key,这样,你导出的签名apk的百度地图功能就不会只显示方格图加载不出来地图的问题了。


总之:如果你用到百度地图功能的apk,仅仅是通过本地环境运行的,你完全可以按照百度开放平台上介绍的流程去获取SHA1。但是,如果你开发的apk是需要自己生成的签名文件(签名证书)导出,放到应用商店去给别人下载的。那么,你申请百度地图key的SHA1值,就应该是来自你生成的签名文件中的SHA1值,SHA1查看方式keytool -list -v -keystore 签名文件。(注意要进入文件所在路径再输入命令)。

8.第三方微信的登录问题

大家都知道随着开发功能需求的多元化,第三方登录,分享和云开发是越来越火热,然而大家在开发第三方登录和分享的过程中就TMD微信的是最难搞和最费事的,估计还有可能搞不好。

可是微信开放平台接入指南里有几个地方写的不清不楚。在此总结一下,以便需要的人。

很多微信公众平台的应用如果移植到app上的话就需要微信授权登陆了。

  1. 目前移动应用上微信登录只提供原生的登录方式,需要用户安装微信客户端才能配合使用。也就是如果第三方应用需要微信授权登陆的话就必须在本机上安装了微信。而后续授权登陆或调用接口之类的相当于app和微信两个应用之间通话。

不成功的主要原因有几个:

a. 忘记在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity(例如应用程序的包名为net.sourceforge.simcpux.wxapi,则新添加的类如下图所示)【如果是易信的话】,并且在清单文件里面进行注册

 

b.授权

我这里是写啊MyApplication里面的,这个大家可以用自己的方法去写。首先我们要先定义要用的IWXAPI ,注册好
public static IWXAPI WXapi;
WXapi = WXAPIFactory.createWXAPI(this, weixin_App_ID, true); (weixin_App_ID就是申请项目得到的AppID
WXapi.registerApp(weixin_App_ID);
好,我们在来看授权代码。
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo";
MyApplication.WXapi.sendReq(req);

同意授权会返回到 WXEntryActivity这个类,调用onResp(BaseResp resp) 方法

蛋疼的地方来了。。。
这里我们看到我们已经拿到code了,
正常情况下我们都会去resp.code得到String类型的code,不过这里就是点不出来。点不出来,得到不code,我们无法进行下一步。

后来我查了下他的父类才发现。我们可以吧resp强行转成SendAuth.Resp类型。(在这里,我也迷茫了很久)
SendAuth.Resp sendResp = (SendAuth.Resp) resp;
这样我们可以就可以通过sendResp来点出code。
sendResp.code OK,得到code接下来就简单多了。哈哈。。。
c.通过code参数加上AppID和AppSecret等,通过API换取access_token出错

这东西写着真的累,上班的时间写这个,我也是醉了,后天就元旦了偷笑

这篇关于最近的android项目开发问题总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131769

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型: