Android studio 编写安卓程序,实现 http 通信,获得百度主页源代码。

-------------------------------------------------------------   ------------------------------------------------------------

不要惊讶,这是一条手动的分割线,为什么用手动的呢?因为这么久了,我还是不会用博客园自带的分割线

------------------------------------------------------------   -------------------------------------------------------------

1. 首先创建一个Android项目,这个应该不需要教了,创建Android项目都不会的话,这篇垃圾博客也看不懂。下面是创建好的Android项目目录结构(其实这都不是重点!)。

2. 实现http通信首先得给我们的Android项目添加网络权限,这一点很重要!!!!相当重要!忘记你会哭死!!!!记住,网络权限!!!!

打开 AndroidManifest.xml 文件

在 </application> 这一句下面添加网络权限!

 <uses-permission android:name="android.permission.INTERNET" /> 

添加完成保存,这一步就完成了,很简单但是很重要!!

3. 编写界面布局。

这个根据自己需要去写就行,比如我们随便写点控件,在写一个button按钮,点击之后去获得百度(https://www.baidu.com/)的网页源代码展示在一个 textview 中,就button有用,其他的都没有用,不写也没关系。

activity_main.xml 文件代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:orientation="vertical"tools:context="com.example.administrator.eschool.MainActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:textSize="25dp"android:text="ESchool 大学生校园交易平台" /><EditTextandroid:id="@+id/username"android:layout_width="match_parent"android:hint="请输入您的用户名"android:layout_height="wrap_content" /><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="textPassword"android:hint="请输入您的密码"android:ems="10"android:id="@+id/password" /><!--点击button来获取百度主页源代码--><Buttonandroid:id="@+id/login"android:layout_width="wrap_content"android:layout_gravity="center"android:text="确认登录"android:layout_height="wrap_content" /><!--用来展示获取到的源码--><TextViewandroid:text="TextView"android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/textView" /></LinearLayout>

布局代码完成之后呢,界面大体是这个样子的。

OK! 界面和权限设置成功就是我们的关键java代码了。

4. 编写 java 代码。

首先打开 MainActivity.java 文件,编写代码。

其实有一个插件挺好用的,他会给你自动生成一些基础代码,例如声明按钮之类的,特别好用,特别方便,其实不用手敲也行,我一直用,会节约点时间。插件的名字叫做 —— LayoutCreate 。 需要的话自己安装,用Android studio就可以安装,不用去网上找安装包。

下面是 java代码  ,自己看,应该没有什么难的地方,能看懂。

package com.example.administrator.eschool;import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;

// 这几个要自己导入
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private EditText username;private EditText password;private Button login;private HttpGet httpGet = null;HttpClient httpClient = null;private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);textView.setText(msg.obj.toString());}};private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {username = (EditText) findViewById(R.id.username);password = (EditText) findViewById(R.id.password);login = (Button) findViewById(R.id.login);login.setOnClickListener(this);textView = (TextView) findViewById(R.id.textView);textView.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.login:submit();break;}}private void submit() {// validateString usernameString = username.getText().toString().trim();if (TextUtils.isEmpty(usernameString)) {Toast.makeText(this, "请输入您的用户名", Toast.LENGTH_SHORT).show();return;}String passwordString = password.getText().toString().trim();if (TextUtils.isEmpty(passwordString)) {Toast.makeText(this, "请输入您的密码", Toast.LENGTH_SHORT).show();return;}// TODO validate success, do somethingnew Thread(new Runnable() {@Overridepublic void run() {// 生成一个请求对象httpGet = new HttpGet("https://www.baidu.com");// 生成一个http客户端对象httpClient = new DefaultHttpClient();// 用客户端发送请求对象try {HttpResponse httpResponse = httpClient.execute(httpGet);// 接收http返回的响应HttpEntity httpEntity = httpResponse.getEntity();// 获得http响应的内容InputStream inputStream = httpEntity.getContent();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));String result = "";String line = "";while ((line = reader.readLine()) != null) {result += line;}Message msg = new Message();msg.obj = result;mHandler.sendMessage(msg);} catch (IOException e) {e.printStackTrace();}}}).start();}
}

运行项目,在输入框输点东西,因为不输东西代码就 return了,不往下运行,代码很明白!输完之后点击按钮就出现效果了。大功告成!

5. 有几点问题需要注意:

1. http 通信要单独开一个线程进行操作,也就是说,点击 button 按钮之后,要开一个线程来运行访问的代码,不能再主线程里进行 http 通信!不然会报错。

2. 再子线程获得 http 响应返回的内容之后必须通过 handler 将数据返回到主线程进行数据展示,也就是说,不能再子线程里操作 界面控件。

3. 要会 线程 和 handler 的操作。

4. 如果要用Android真机测试,如果Android studio找不到手机很可能是缺少驱动,手机和电脑都下载一个360手机助手的软件,通过360手机助手让手机和电脑连起来,再去Android studio就会发现能找到手机了,驱动打好就可以卸载了360手机助手,留着也行,随意。

OK!任务完成!

转载于:https://www.cnblogs.com/wjw1014/p/8863691.html

Android http通信案例相关推荐

  1. 基于AOA协议的android USB通信

    摘 要:AOA协议是Google公司推出的用于实现Android设备与外围设备之间USB通信的协议.该协议拓展了Android设备USB接口的功能,为基于Android系统的智能设备应用于数据采集和设 ...

  2. CH340与Android串口通信

    CH340与Android串口通信 为何要将CH340的ATD+Eclipse上的安卓工程移植到AndroidStudio 移植的具体步骤 CH340串口通信驱动函数 通信过程中重难点 还存在的问题 ...

  3. android IPC通信(下)-AIDL

    android IPC通信(上)-sharedUserId&&Messenger android IPC通信(中)-ContentProvider&&Socket 这篇 ...

  4. 【Android】Android应用开发案例教程

    <Android应用开发案例教程(高等学校计算机科学与技术项目驱动案例实践规划教材)>应用"项目驱动(project-driven) "最新教学模式,通过完整的项目案例 ...

  5. python 网络编程之Socket通信案例消息发送与接收

    背景 网络编程是python编程中的一项基本技术.本文将实现一个简单的Socket通信案例消息发送与接收 正文 在python中的socket编程的大致流程图如上所示 我们来首先编写客户端的代码: # ...

  6. Android消息通信之无所不能的第三方开源项目EventBus

     Android消息通信之无所不能的第三方开源项目EventBus 在Android开发中,消息通信在开发过程中是比较重要但比较略微繁琐的过程,比如,Activity与Fragment之间的消息通 ...

  7. 《Linux高性能服务器编程》学习总结(四)——TCP/IP通信案例:访问Internet上的Web服务器...

    第四章      TCP/IP通信案例:访问Internet上的Web服务器 HTTP协议是工作在应用层上的协议,其应用十分广泛,而在进行通信的过程中,经常使用HTTP代理服务器.HTTP代理服务器主 ...

  8. air android 通信,Android超声波通信例子

    [实例简介] Android超声波通信例子,手机之间,手机与超声波设备间的超声波通信 [实例截图] [核心代码] ComAir5Demo_V1.0.3 └── ComAir5Demo_V1.0.3 ├ ...

  9. Android串口通信实例分析【附源码】

    Android 串口通信实例分析,用的时开源的android-serialport-api 这个是用android ndk实现的串口通信,我把他做了一个简化,适合于一般的程序的串口通信移植,欢迎拍砖- ...

最新文章

  1. 青少年编程竞赛交流群周报(第036周)
  2. 修改系统默认区域语言日期格式
  3. Vue.js 自定义指令
  4. 计算机重应用,装了一大堆应用,iPhone6会变重吗?
  5. Android Studio导入项目遇到的问题
  6. nodejs调用函数和模块
  7. 树莓派环境处理_一种基于树莓派的便携式的环境监测系统的制作方法
  8. Python标准库socketserver实现UDP协议时间服务器
  9. 用户可以使用三种方式使用计算机,计算机操作系统期末复习笔记
  10. 图像识别实战——天气分类
  11. 每日一句20200103
  12. 如何解决CAN FD与CAN网络共存问题
  13. 单模光纤和多模光纤的区别,及光纤收发机(光电收发器)的介绍
  14. centos linux 查看ip,centos如何查看ip
  15. 秦曾昌人工智能课程---1、机器学习中的数学基础
  16. 全国计算机等级考试二级公共,全国计算机等级考试二级公共基础知识.
  17. 【项目实战19】k8s(5)—service服务(IPVS均衡负载)
  18. Docker系列六EPIC领游戏
  19. MiniLyrics, 非常不错的歌词插件
  20. vc++6.0/使用VisualC++6.0创建MFC基本对话框程序制作数字钟表教程

热门文章

  1. python切片操作例题_Python之切片操作
  2. anaconda tensorflow 2.3_TensorFlow 速成 | 统计师的Python日记 第13天
  3. 计算机应用研究投稿,计算机应用研究
  4. 乌鲁木齐计算机老师待遇,如果月薪超过10000元,安排去新疆当教学教师,愿意吗?...
  5. mysql使用group by实现组内排序实战
  6. php程序内存优化之数组操作优化
  7. 【Java面试题】docker启动失败原因
  8. 【微信小程序企业级开发教程】后台用Java操作MySQL表
  9. python【蓝桥杯vip练习题库】ADV-105 不同单词个数统计(集合)
  10. 和 对比_家用保温杯小对比