星空5G 导航

如何在Android开发中用HttpClient连接网络数据-

2024-09-12编辑:本站
Android 如何用HttpClient 以Post方式提交数据并添加http头信息~

//添加http头信息
httppost.addHeader(Authorization, your token); //认证token
httppost.addHeader(Content-Type, application/json);
httppost.addHeader(User-Agent, imgfornote);
//http post的json数据格式: {name: your name,parentId: id_of_parent}
JSONObject obj = new JSONObject();
obj.put(name, your name);
obj.put(parentId, your parentid);
httppost.setEntity(new StringEntity(obj.toString()));
HttpResponse response;
response = httpclient.execute(httppost);
//检验状态码,如果成功接收数据
int code = response.getStatusLine().getStatusCode();
if (code == 200) {
String rev = EntityUtils.toString(response.getEntity());//返回json格式: {id: 27JpL~j4vsL0LX00E00005,version: abc}
obj = new JSONObject(rev);
String id = obj.getString(id);
String version = obj.getString(version);}} catch (ClientProtocolException e) {
} catch (Exception e) {}}主要用到的类有:org.apache.http.client.HttpClient 、org.apache.http.client.methods.HttpPost 和org.json.JSONObject

  1
  构造完整的URL

  2
  设置一段间隔时间参数,保证HTTP连接顺利建立成功

  3
  构造HttpClient的实例,并传入Httpparams参数

  4
  创建GET方法的实例,并传入URL地址

  5
  使用httpclient执行httpGet进行联网,返回httpResponse(带有数据)

  6
  获得返回结果,并将数据变成String类型,方便使用JSON进行解析

HttpClient网络访问

一、HttpClient网络访问:
(一)、简介:
1、Apache组织提供了HttpClient项目,可以实现网络访问。在Android中,成功集成了HttpClient,所以在Android中可以直接使用HttpClient访问网络。

2、与HttpURLConnection相比,HttpClient将前者中的输入、输出流操作,统一封装成HttpGet、HttpPost、HttpRequest类。

HttpClient:网络连接对象;
HttpGet:代表发送GET请求;
HttpPost:代表发送POST请求;
HttpResponse:代表处理服务器响应的对象。
HttpEntity对象:该对象中包含了服务器所有的返回内容。
3、使用步骤:(六部曲)【重点】
创建HttpClient对象:通过实例化DefaultHttpClient获得;
创建HttpGet或HttpPost对象:通过实例化 HttpGet或HttpPost 获得,而构造方法的参数是urlstring(即需要访问的网络url地址)。也可以通过调用setParams()方法来添加请求参数;
调用HttpClient对象的execute()方法,参数是刚才创建的 HttpGet或HttpPost对象 ,返回值是HttpResponse对象;
通过response对象中的getStatusLine()方法和getStatusCode()方法获取服务器响应状态是否是200。
调用 HttpResponse对象的getEntity()方法,返回HttpEntity对象。而该对象中包含了服务器所有的返回内容。
借助EntityUtils的toString()方法或toByteArray()对 HttpEntity对象进行处理,也可以通过IO流对 HttpEntity对象进行操作。

(二)、封装HttpClientHelper工具类:

public class HttpClientHelper {
public static HttpClient checkNetwork(String url) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse httpResponse = null;
try {
httpResponse = httpClient.execute(request);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
return httpClient;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

/**
* 作用:实现网络访问文件,将获取到数据储存在文件流中
*
* @param url
* :访问网络的url地址
* @return inputstream
*/
public static InputStream loadFileFromURL(String url) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet requestGet = new HttpGet(url);
HttpResponse httpResponse;
try {
httpResponse = httpClient.execute(requestGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = httpResponse.getEntity();
return entity.getContent();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

/**
* 作用:实现网络访问文件,将获取到的数据存在字节数组中
*
* @param url
* :访问网络的url地址
* @return byte[]
*/
public static byte[] loadByteFromURL(String url) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet requestGet = new HttpGet(url);
try {
HttpResponse httpResponse = httpClient.execute(requestGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
return EntityUtils.toByteArray(httpEntity);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("====>" + e.toString());
}
return null;
}

/**
* 作用:实现网络访问文件,返回字符串
*
* @param url
* :访问网络的url地址
* @return String
*/
public static String loadTextFromURL(String url) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet requestGet = new HttpGet(url);
try {
HttpResponse httpResponse = httpClient.execute(requestGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
return EntityUtils.toString(httpEntity, "utf-8");
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

/**
* 作用:实现网络访问文件,先给服务器通过“GET”方式提交数据,再返回相应的数据
*
* @param url
* :访问网络的url地址
* @param params
* String url:访问url时,需要传递给服务器的参数。
* 第二个参数格式为:username=wangxiangjun&password=123456
* @return byte[]
*/
public static byte[] doGetSubmit(String url, String params) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet requestGet = new HttpGet(url + "?" + params);
try {
HttpResponse httpResponse = httpClient.execute(requestGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
return EntityUtils.toByteArray(httpEntity);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

/**
* 作用:实现网络访问文件,先给服务器通过“POST”方式提交数据,再返回相应的数据
*
* @param url
* :访问网络的url地址
* @param params
* String url:访问url时,需要传递给服务器的参数。 第二个参数为:List<NameValuePair>
* @return byte[]
*/
public static byte[] doPostSubmit(String url, List<NameValuePair> params) {
HttpClient httpClient = new DefaultHttpClient();
HttpPost requestPost = new HttpPost(url);
try {
requestPost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
HttpResponse httpResponse = httpClient.execute(requestPost);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
return EntityUtils.toByteArray(httpEntity);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

/**
* 作用:实现网络访问文件,先给服务器通过“POST”方式提交数据,再返回相应的数据
*
* @param url
* :访问网络的url地址
* @param params
* String url:访问url时,需要传递给服务器的参数。 Map<String , Object>
* @return byte[]
*/
public static byte[] doPostSubmit(String url, Map<String, Object> params) {
HttpClient httpClient = new DefaultHttpClient();
HttpPost requestPost = new HttpPost(url);

List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
try {
if (params != null) {
for (Map.Entry<String, Object> entry : params.entrySet()) {
String key = entry.getKey();
String value = entry.getValue().toString();
BasicNameValuePair nameValuePair = new BasicNameValuePair(
key, value);
parameters.add(nameValuePair);
}
}
requestPost
.setEntity(new UrlEncodedFormEntity(parameters, "utf-8"));
HttpResponse httpResponse = httpClient.execute(requestPost);

if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
return EntityUtils.toByteArray(httpEntity);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

  • 如何在Android开发中编写应用程序?
  • 答:开发应用:根据您的需求,编写代码和设计用户界面。您可以使用Java或Kotlin进行开发,并利用Android提供的各种API和框架。构建APK文件:在完成应用程序的开发后,使用构建工具将其打包为APK文件。在Android Studio中,您可以选择菜单栏中的「Build」> 「Build Bundle(s) / APK(s)」选项,然后选择生成APK文...

  • 如何在Android上使用API
  • 答:1.注册API免费接口 首先,你需要在API提供商的网站上注册一个账户。这通常是免费的,并且只需要几分钟时间。注册完成后,你将获得一个API密钥,这是访问API的凭证。2.查找API文档 每个API都有一份文档,其中包含了API的详细信息,如请求和响应格式、支持的参数、限制等。你需要仔细阅读这些文档,以确保...

  • 如何进行Android应用的开发
  • 答:首先需要安装Java开发工具包(JDK)和集成开发环境(IDE)如Eclipse、AndroidStudio等。通过这些工具,最好能够做到运用Java语言进行编程。2.熟悉基本的HTML,XML和CSS知识在Android应用开发中,还需要掌握一些关于HTML,XML和CSS的基础知识。HTML用于创建静态界面;XML用于存储数据和定义用户界面;CSS用于美化Andr...

  • 如何在android开发使用ACTION
  • 答:方法如下:1.前面有用使用Intent来控制 Service 2.使用的参数是Service的类 3.Service的启动/关闭还有另外一种方式来控制 4.通过Intent传入Action的参数 5.在manifest中注册一个Service并且设置一个action

  • 如何使用Android 开发者选项
  • 答:1首先打开手机设置。一般就是个齿轮图标。2在设置界面中的最下面找到“关于手机”点击进入。3找到“版本号”(有的是“内部版本号”)。4连续点击“版本号”,会有“还有x次即可进入开发者选项”的类似提示。接连点击!直到显示“现在处于开发者模式”或者“开启成功”之类的提示为止。5返回上一层设置...

  • 开发安卓app(从入门到精通)
  • 答:在“Configureyourproject”对话框中,选择要使用的最低SDK版本、目标SDK版本等。可以根据自己的需求进行配置。4.运行项目 点击“Run”按钮,选择要运行的安卓虚拟机,等待项目编译完成后,就可以在安卓虚拟机上运行第一个安卓app了。三、安卓app的开发流程 1.界面设计 安卓app的界面设计是非常重要的一部分...

  • 如何使用Eclipse进行Android开发
  • 答:第一步:安装和配置Eclipse IDE和Android SDK 要开始使用Eclipse进行Android开发,你首先需要下载并安装Eclipse IDE for Java EE Developers和Android SDK。安装完成后,你需要在Eclipse中配置Android SDK的路径。这可以通过在Eclipse的"Window"菜单中选择"Preferences",然后在"Android"选项下选择"SDK Location"...

  • 在Android开发中怎样使用Application类
  • 答:1、Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息。2、Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。3、通常是不需要指定一个...

  • 如何设置android studio让程序运行在真机中
  • 答:android studio 开发中如何让运用运行在真机中。大体实现方式有3种:分别是:真机通过usb插到电脑上进行开发。android studio 上面编写程序进行编译apk版本,通过其他助手或者adb命令推送到手机中运行。通过wifi连接android studio把编写好的程序运行到真机上。【原理】让运用运行到真机中,需要usb数据线,安装...

  • 在Android开发中怎样使用Application类
  • 答:2. Application类在项目开发中的使用 首先在项目目录下一个Java类继承Application类,实现是onCreate()方法。这个类可以做APP的全局初始化工作,比如图片加载框架的全局配置信息设置。public class AndroidApplication extends Application { private static AndroidApplication instance;Override public void onCreate...

    相关内容

    首页 新知 身健
    返回顶部

    © 星空5G w.xkyn.com