网站怎样做排名,网站后台管理系统进不去怎么办,中山做网络推广的公司,wordpress5.0默认主题Android中网络相关的技术#xff0c;主要分别两种#xff0c;一种为直接显示网页#xff0c;另外一种为获取服务器中的数据进行设置。
权限声明
访问网络是需要声明权限
manifest xmlns:androidhttp://schemas.android.com/apk/res/androidpackage…Android中网络相关的技术主要分别两种一种为直接显示网页另外一种为获取服务器中的数据进行设置。
权限声明
访问网络是需要声明权限
manifest xmlns:androidhttp://schemas.android.com/apk/res/androidpackagecom.example.webviewtestuses-permission android:nameandroid.permission.INTERNET /.../manifestWebView的使用
通过WebView的控件直接显示网页不需要考虑网页中的具体数据。
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)webView.settings.javaScriptEnabledtruewebView.webViewClient WebViewClient()webView.loadUrl(https://www.baidu.com)}}调用了WebView的setWebViewClient()方法并传入了一个WebViewClient的实例。这段代码的作用是当需要从一个网页跳转到另一个网页时我们希望目标网页仍然在当前WebView中显示而不是打开系统浏览器。
HttpURLConnection的使用
get获取数据
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)sendRequestBtn.setOnClickListener {sendRequestWithHttpURLConnection()}}private fun sendRequestWithHttpURLConnection() {// 开启线程发起网络请求thread {var connection: HttpURLConnection? nulltry {val response StringBuilder()val url URL(https://www.baidu.com)connection url.openConnection() as HttpURLConnectionconnection.connectTimeout 8000connection.readTimeout 8000val input connection.inputStream// 下面对获取到的输入流进行读取val reader BufferedReader(InputStreamReader(input))reader.use {reader.forEachLine {response.append(it)}}} catch (e: Exception) {e.printStackTrace()} finally {connection?.disconnect()}}}}
}post发送数据
connection.requestMethod POST
val output DataOutputStream(connection.outputStream)
output.writeBytes(usernameadminpassword123456)okHttp的使用
项目主页地址 https://github.com/square/okhttp 添加依赖
dependencies {...implementation com.squareup.okhttp3:okhttp:4.1.0
}版本根据官网中的最新版本进行添加
okHttp的具体用法
获取Client的实例
val client OkHttpClient()创建get的request实例
创建request需要知道是否需要设置token
val request Request.Builder().url(https://www.baidu.com).build()获取response
同步获取
val response client.newCall(request).execute()
val responseData response.body?.string()异步获取 client.newCall(request).enqueue(new Callback() {Overridepublic void onFailure(NotNull Call call, NotNull IOException e) {//响应失败}Overridepublic void onResponse(NotNull Call call, NotNull Response response) throws IOException {//响应成功val responseData response.body?.string()}});发起Post的请求
val requestBody FormBody.Builder().add(username, admin).add(password, 123456).build()val request Request.Builder().url(https://www.baidu.com).post(requestBody).build()从Android 9.0系统开始应用程序默认只允许使用HTTPS类型的网络请求HTTP类型的网络请求因为有安全隐患默认不再被支持如果使用的是HTTP需要设置文件res - xml -network_config.xml文件。
?xml version1.0 encodingutf-8?
network-security-configbase-config cleartextTrafficPermittedtruetrust-anchorscertificates srcsystem //trust-anchors/base-config
/network-security-config这段配置文件是允许我们以明文的方式在网络上传输数据而HTTP使用的就是明文传输方式。 需要修改manifest文件中的内容如下所示
manifest xmlns:androidhttp://schemas.android.com/apk/res/androidpackagecom.example.networktest...applicationandroid:allowBackuptrueandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:roundIconmipmap/ic_launcher_roundandroid:supportsRtltrueandroid:themestyle/AppThemeandroid:networkSecurityConfigxml/network_config.../application
/manifest解析XML数据的两种方法
①pull方法
方法parseXMLWithPull中的即为使用Pull方法解析XML格式的数据
class MainActivity : AppCompatActivity() {...private fun sendRequestWithOkHttp() {thread {try {val client OkHttpClient()val request Request.Builder()// 指定访问的服务器地址是计算机本机.url(http://10.0.2.2/get_data.xml).build()val response client.newCall(request).execute()val responseData response.body?.string()if (responseData ! null) {parseXMLWithPull(responseData)}} catch (e: Exception) {e.printStackTrace()}}}...private fun parseXMLWithPull(xmlData: String) {try {val factory XmlPullParserFactory.newInstance()val xmlPullParser factory.newPullParser()xmlPullParser.setInput(StringReader(xmlData))var eventType xmlPullParser.eventTypevar id var name var version while (eventType ! XmlPullParser.END_DOCUMENT) {val nodeName xmlPullParser.namewhen (eventType) {// 开始解析某个节点XmlPullParser.START_TAG - {when (nodeName) {id - id xmlPullParser.nextText()name - name xmlPullParser.nextText()version - version xmlPullParser.nextText()}}// 完成解析某个节点XmlPullParser.END_TAG - {if (app nodeName) {Log.d(MainActivity, id is $id)Log.d(MainActivity, name is $name)Log.d(MainActivity, version is $version)}}}eventType xmlPullParser.next()}} catch (e: Exception) {e.printStackTrace()}}
}②SAX方法
class MainActivity : AppCompatActivity() {...private fun sendRequestWithOkHttp() {thread {try {val client OkHttpClient()val request Request.Builder()// 指定访问的服务器地址是计算机本机.url(http://10.0.2.2/get_data.xml).build()val response client.newCall(request).execute()val responseData response.body?.string()if (responseData ! null) {parseXMLWithSAX(responseData)}} catch (e: Exception) {e.printStackTrace()}}}...private fun parseXMLWithSAX(xmlData: String) {try {val factory SAXParserFactory.newInstance()val xmlReader factory.newSAXParser().XMLReaderval handler ContentHandler()// 将ContentHandler的实例设置到XMLReader中xmlReader.contentHandler handler// 开始执行解析xmlReader.parse(InputSource(StringReader(xmlData)))} catch (e: Exception) {e.printStackTrace()}}
}ContentHandler的定义
class ContentHandler : DefaultHandler() {private var nodeName private lateinit var id: StringBuilderprivate lateinit var name: StringBuilderprivate lateinit var version: StringBuilderoverride fun startDocument() {id StringBuilder()name StringBuilder()version StringBuilder()}override fun startElement(uri: String, localName: String, qName: String, attributes:Attributes) {// 记录当前节点名nodeName localNameLog.d(ContentHandler, uri is $uri)Log.d(ContentHandler, localName is $localName)Log.d(ContentHandler, qName is $qName)Log.d(ContentHandler, attributes is $attributes)}override fun characters(ch: CharArray, start: Int, length: Int) {// 根据当前节点名判断将内容添加到哪一个StringBuilder对象中when (nodeName) {id - id.append(ch, start, length)name - name.append(ch, start, length)version - version.append(ch, start, length)}}override fun endElement(uri: String, localName: String, qName: String) {if (app localName) {Log.d(ContentHandler, id is ${id.toString().trim()})Log.d(ContentHandler, name is ${name.toString().trim()})Log.d(ContentHandler, version is ${version.toString().trim()})// 最后要将StringBuilder清空id.setLength(0)name.setLength(0)version.setLength(0)}}override fun endDocument() {}}id、name和version中都可能是包括回车或换行符的需要调用trim。
解析JSON数据
官方提供的JSONObject使用Google的开源库GSON。或者使用一些第三方的开源库如Jackson、FastJSON等。
①官方的JSONObject
......private fun parseJSONWithJSONObject(jsonData: String) {try {val jsonArray JSONArray(jsonData)for (i in 0 until jsonArray.length()) {val jsonObject jsonArray.getJSONObject(i)val id jsonObject.getString(id)val name jsonObject.getString(name)val version jsonObject.getString(version)Log.d(MainActivity, id is $id)Log.d(MainActivity, name is $name)Log.d(MainActivity, version is $version)}} catch (e: Exception) {e.printStackTrace()}}
}②使用GSON解析
添加依赖
dependencies {...implementation com.google.code.gson:gson:2.8.5
}解析一段字符串 {“name”:“Tom”,“age”:20} 设置Person的类直接进行转换
val gson Gson()
val person gson.fromJson(jsonData, Person::class.java)解析字符串数组 需要借助TypeToken将期望解析成的数据类型传入fromJson()方法中
val typeOf object : TypeTokenListPerson() {}.type
val people gson.fromJsonListPerson(jsonData, typeOf)jsonData为需要解析的字符串数组
网络请求回调方法
interface HttpCallbackListener {fun onFinish(response: String)fun onError(e: Exception)
}object HttpUtil {fun sendHttpRequest(address: String, listener: HttpCallbackListener) {thread {var connection: HttpURLConnection? nulltry {val response StringBuilder()val url URL(address)connection url.openConnection() as HttpURLConnectionconnection.connectTimeout 8000connection.readTimeout 8000val input connection.inputStreamval reader BufferedReader(InputStreamReader(input))reader.use {reader.forEachLine {response.append(it)}}// 回调onFinish()方法listener.onFinish(response.toString())} catch (e: Exception) {e.printStackTrace()// 回调onError()方法listener.onError(e)} finally {connection?.disconnect()}}}}使用json
object HttpUtil {...fun sendOkHttpRequest(address: String, callback: okhttp3.Callback) {val client OkHttpClient()val request Request.Builder().url(address).build()client.newCall(request).enqueue(callback)}
}使用
HttpUtil.sendOkHttpRequest(address, object : Callback {override fun onResponse(call: Call, response: Response) {// 得到服务器返回的具体内容val responseData response.body?.string()}override fun onFailure(call: Call, e: IOException) {// 在这里对异常情况进行处理}
})
文章转载自: http://www.morning.bdkhl.cn.gov.cn.bdkhl.cn http://www.morning.zkqsc.cn.gov.cn.zkqsc.cn http://www.morning.rrxgx.cn.gov.cn.rrxgx.cn http://www.morning.lrylj.cn.gov.cn.lrylj.cn http://www.morning.hwljx.cn.gov.cn.hwljx.cn http://www.morning.rldph.cn.gov.cn.rldph.cn http://www.morning.twdkt.cn.gov.cn.twdkt.cn http://www.morning.jrpmf.cn.gov.cn.jrpmf.cn http://www.morning.hwpcm.cn.gov.cn.hwpcm.cn http://www.morning.nmrtb.cn.gov.cn.nmrtb.cn http://www.morning.xfdkh.cn.gov.cn.xfdkh.cn http://www.morning.gbtty.cn.gov.cn.gbtty.cn http://www.morning.fxjnn.cn.gov.cn.fxjnn.cn http://www.morning.grlth.cn.gov.cn.grlth.cn http://www.morning.txmkx.cn.gov.cn.txmkx.cn http://www.morning.dkzwx.cn.gov.cn.dkzwx.cn http://www.morning.qsbcg.cn.gov.cn.qsbcg.cn http://www.morning.hncrc.cn.gov.cn.hncrc.cn http://www.morning.lrskd.cn.gov.cn.lrskd.cn http://www.morning.gglhj.cn.gov.cn.gglhj.cn http://www.morning.rnmyw.cn.gov.cn.rnmyw.cn http://www.morning.trsdm.cn.gov.cn.trsdm.cn http://www.morning.cczrw.cn.gov.cn.cczrw.cn http://www.morning.ndhxn.cn.gov.cn.ndhxn.cn http://www.morning.qnzk.cn.gov.cn.qnzk.cn http://www.morning.zlqyj.cn.gov.cn.zlqyj.cn http://www.morning.xtyyg.cn.gov.cn.xtyyg.cn http://www.morning.xplng.cn.gov.cn.xplng.cn http://www.morning.ljngm.cn.gov.cn.ljngm.cn http://www.morning.zzgtdz.cn.gov.cn.zzgtdz.cn http://www.morning.tmpsc.cn.gov.cn.tmpsc.cn http://www.morning.rwzc.cn.gov.cn.rwzc.cn http://www.morning.ndcf.cn.gov.cn.ndcf.cn http://www.morning.sglcg.cn.gov.cn.sglcg.cn http://www.morning.rfljb.cn.gov.cn.rfljb.cn http://www.morning.qjzgj.cn.gov.cn.qjzgj.cn http://www.morning.tcylt.cn.gov.cn.tcylt.cn http://www.morning.mzgq.cn.gov.cn.mzgq.cn http://www.morning.mxbks.cn.gov.cn.mxbks.cn http://www.morning.xrpjr.cn.gov.cn.xrpjr.cn http://www.morning.fxpyt.cn.gov.cn.fxpyt.cn http://www.morning.zxxys.cn.gov.cn.zxxys.cn http://www.morning.gfrtg.com.gov.cn.gfrtg.com http://www.morning.qhjkz.cn.gov.cn.qhjkz.cn http://www.morning.rqqkc.cn.gov.cn.rqqkc.cn http://www.morning.nzfqw.cn.gov.cn.nzfqw.cn http://www.morning.ghxzd.cn.gov.cn.ghxzd.cn http://www.morning.glxmf.cn.gov.cn.glxmf.cn http://www.morning.jjpk.cn.gov.cn.jjpk.cn http://www.morning.cspwj.cn.gov.cn.cspwj.cn http://www.morning.lhjmq.cn.gov.cn.lhjmq.cn http://www.morning.ppbqz.cn.gov.cn.ppbqz.cn http://www.morning.kcxtz.cn.gov.cn.kcxtz.cn http://www.morning.jrqcj.cn.gov.cn.jrqcj.cn http://www.morning.smry.cn.gov.cn.smry.cn http://www.morning.byrlg.cn.gov.cn.byrlg.cn http://www.morning.npfrj.cn.gov.cn.npfrj.cn http://www.morning.hmfxl.cn.gov.cn.hmfxl.cn http://www.morning.twdkt.cn.gov.cn.twdkt.cn http://www.morning.zwdrz.cn.gov.cn.zwdrz.cn http://www.morning.zzfqn.cn.gov.cn.zzfqn.cn http://www.morning.reababy.com.gov.cn.reababy.com http://www.morning.jqtb.cn.gov.cn.jqtb.cn http://www.morning.jspnx.cn.gov.cn.jspnx.cn http://www.morning.pltbd.cn.gov.cn.pltbd.cn http://www.morning.rghkg.cn.gov.cn.rghkg.cn http://www.morning.jcfg.cn.gov.cn.jcfg.cn http://www.morning.4q9h.cn.gov.cn.4q9h.cn http://www.morning.plpqf.cn.gov.cn.plpqf.cn http://www.morning.qfzjn.cn.gov.cn.qfzjn.cn http://www.morning.fgqbx.cn.gov.cn.fgqbx.cn http://www.morning.qnzgr.cn.gov.cn.qnzgr.cn http://www.morning.kmjbs.cn.gov.cn.kmjbs.cn http://www.morning.tmbfz.cn.gov.cn.tmbfz.cn http://www.morning.ylpwc.cn.gov.cn.ylpwc.cn http://www.morning.bfgbz.cn.gov.cn.bfgbz.cn http://www.morning.ypmqy.cn.gov.cn.ypmqy.cn http://www.morning.pqnps.cn.gov.cn.pqnps.cn http://www.morning.nclbk.cn.gov.cn.nclbk.cn http://www.morning.nlwrg.cn.gov.cn.nlwrg.cn