热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安卓实训第六天:首先使用AsyncHttpClient来完成网页源代码的显示功能,json数据在服务器端的读取还有安卓上的读取

一、使用AsyncHttpClient来完成网页源代码的显示功能:首先。我们引入步骤:1.添加网络权限2.判断网页地址是否为空3.不为空的情况下创建客户端对象4.处理getpost请求5.如果成功的


一、使用AsyncHttpClient来完成网页源代码的显示功能:

首先。我们引入

步骤:

1.添加网络权限

2.判断网页地址是否为空

3.不为空的情况下创建客户端对象

4.处理get/post请求

5.如果成功的话,设置显示内容的值

a) 获取文件响应编码类型(保证不乱码)

i. 遍历头部信息取出contentType_value的值

ii. 定义服务器缺省编码方式

iii.  处理contentType_value来获取编码方式

1. contentType_value是否有“=

2. contentType_value是否为空

b) 根据服务端返回的编码给显示内容设置值

package com.example.android_htmlcode;

import java.io.UnsupportedEncodingException;

import org.apache.http.Header;

import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;

public class MainActivity extends Activity {

private EditText et_url;
private TextView tv_url;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置显示视图
setContentView(R.layout.activity_main);
et_url = (EditText) findViewById(R.id.et_url);
tv_url = (TextView) findViewById(R.id.tv_info);
}

// android:OnClick="sendHttpUil
public void sendHttpUil(View v) {
int id = v.getId();
switch (id) {
case R.id.btn_send:

String url = et_url.getText().toString();
// 判断网页地址是否为空
if (TextUtils.isEmpty(url)) {
Toast.makeText(this, "网页地址不能为空", 0).show();
} else {
// 创建客户端对象
AsyncHttpClient client = new AsyncHttpClient();

// 处理get/post请求
client.get(url, new AsyncHttpResponseHandler() {

@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
super.onSuccess(statusCode, headers, responseBody);
// 获取文件响应类型
String contentType_value = null;

// 遍历头部信息
for (Header header : headers) {
// 获取contentType_value的头部信息
if (header.getName().equals("Content-Type")) {
// 获取他的value值
contentType_value = header.getValue();
}
}

// 定义服务器端缺省的编码方式
String default_charset = "UTF-8";
// 处理contentType_value来获取编码方式
// 判断是否为null
if (contentType_value != null) {
// 判断是否有=字符
if (contentType_value.contains("=")) {
// 获取=字符位置
int index = contentType_value.indexOf("=");
// 从=所在位置的下一个字符开始截取,返回服务器端的编码
default_charset = contentType_value.substring(
index + 1, contentType_value.length());
} else {
String result = new String(responseBody);
default_charset = getCharSet(result);
}
} else {
String result = new String(responseBody);
default_charset = getCharSet(result);
}
Toast.makeText(MainActivity.this,
"编码是:" + default_charset, 0).show();

if (statusCode == 200) {
try {
tv_url.setText(new String(responseBody,
default_charset));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

/**
* 获取网页源代码中默认的编码
*
* @param result
* @return
*/
public String getCharSet(String result) {
String defaultCharset = null;
// // cOntent="text/html; charset=GBK" /> //html4
//
if (result != null) {
if (result
.contains("cOntent=\"text/html; charset=GBK\"")) {
defaultCharset = "GBK";
} else if (result
.contains("cOntent=\"text/html; charset=UTF-8\"")) {
defaultCharset = "UTF-8";
} else if (result
.contains("cOntent=\"text/html; charset=GB2312\"")) {
defaultCharset = "GB2312";
} else if (result.contains("charset=\"UTF-8\"")) {
defaultCharset = "UTF-8";
} else if (result.contains("charset=\"UTF-8\"")) {
defaultCharset = "GBK";
}
}
return defaultCharset;
}

});
}

break;

default:
break;
}
}

}


 

二、通过开源框架获取JSON数据:

package com.example.android_json;

import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// http://172.16.237.200:8080/video/JsonServlet
initData();
}

private void initData() {
// 创建客户端对象
AsyncHttpClient client = new AsyncHttpClient();
String url = "http://172.16.237.200:8080/video/JsonServlet";
Toast.makeText(this, "发送请求到服务器", 0).show();
client.get(url, new JsonHttpResponseHandler() {

//返回JSONObject对象|JSONOArray对象
@Override
public void onSuccess(int statusCode, Header[] headers,
JSONArray response) {
// TODO Auto-generated method stub
super.onSuccess(statusCode, headers, response);

if (statusCode == 200) {
//遍历json数组
for (int i = 0; i try {
// 获取具体的一个JSONObject对象
JSONObject obj = response.getJSONObject(i);
//JSONObject对象get(“属性名”),getString(“属性名”),getInt(“属性名”)等方法来获取指定属性名的值
System.out.println("序号" + obj.getString("id")
+ "--------姓名:" + obj.getString("name")
+ "--------密码:" + obj.getString("pass")
+ "--------其他:" + obj.getString("pass"));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
});
}

}

常见错误分析:当遍历json数组时,若没有对于json数据就会报错,例如:(部分代码整理源于赵雅智女士的)

 


推荐阅读
  • 第三周课堂测试1、使用汇编语言编写指令时,用一些简单的容易记忆的符号来代替二进制指令,比机器语言更为方便,属于高级语言。(B ... [详细]
  • 本文提供了一个Android应用中用于抓取网页信息并下载图片的示例代码。通过该代码,开发者可以轻松实现从指定URL获取网页内容及其中的图片资源。 ... [详细]
  • 本文介绍了如何在Spring框架中配置和使用定时任务,包括初始化配置和动态启动定时器的方法。通过示例代码展示了如何利用Spring的TaskScheduler接口来创建和管理定时任务。 ... [详细]
  • 深入解析Android Activity生命周期
    本文详细探讨了Android中Activity的生命周期,通过实例代码和详细的步骤说明,帮助开发者更好地理解和掌握Activity各个阶段的行为。 ... [详细]
  • 本文介绍了JSP的基本概念、常用标签及其功能,并通过示例详细说明了如何在JSP页面中使用Java代码。 ... [详细]
  • 本文总结了在使用React Native开发过程中遇到的一些常见问题及其解决方法,包括配置错误、依赖问题和特定组件的使用技巧。 ... [详细]
  • Python安全实践:Web安全与SQL注入防御
    本文旨在介绍Web安全的基础知识,特别是如何使用Python和相关工具来识别和防止SQL注入攻击。通过实际案例分析,帮助读者理解SQL注入的危害,并掌握有效的防御策略。 ... [详细]
  • 利用Executor框架管理线程池
    本文介绍了如何使用Executor框架来管理和创建线程池,包括不同的线程池类型及其应用场景,以及如何通过Executors工厂类创建不同类型的Executor实例。 ... [详细]
  • 这个报错出现在userDao里面,sessionfactory没有注入。解决办法:spring整合Hibernate使用test测试时要把spring.xml和spring-hib ... [详细]
  • 本文探讨了Flutter和Angular这两个流行框架的主要区别,包括它们的设计理念、适用场景及技术实现。 ... [详细]
  • Java 中静态和非静态嵌套类的区别 ... [详细]
  • PHP网站部署指南:从零开始搭建PHP网站
    本文提供了详细的步骤指导,帮助开发者在不同环境下成功部署PHP网站,包括在IIS和Apache服务器上的具体操作。 ... [详细]
  • 解析 HTTP 头 'Vary: Accept-Encoding' 的作用与重要性
    本文详细探讨了 'Vary: Accept-Encoding' HTTP 头的作用,即指导缓存系统(如代理服务器和 CDN)根据不同的编码需求存储和提供适当的资源版本,确保不同类型的客户端能够接收到适合自己的内容。 ... [详细]
  • Struts2框架构建指南
    本文详细介绍了如何使用Struts2(版本2.3.16.3)构建Web应用,包括必要的依赖库添加、配置文件设置以及简单的示例代码。Struts2是Apache软件基金会下的一个开源框架,用于简化Java Web应用程序的开发。 ... [详细]
  • 本教程旨在指导开发者如何在Android应用中通过ViewPager组件实现图片轮播功能,适用于初学者和有一定经验的开发者,帮助提升应用的视觉吸引力。 ... [详细]
author-avatar
手机用户2502922607
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有