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"> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="25dp"
android:text="ESchool 大学生校园交易平台" /> <EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:hint="请输入您的用户名"
android:layout_height="wrap_content" /> <EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:hint="请输入您的密码"
android:ems="10"
android:id="@+id/password" /> <!--点击button来获取百度主页源代码-->
<Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:text="确认登录"
android:layout_height="wrap_content" /> <!--用来展示获取到的源码-->
<TextView
android: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() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
textView.setText(msg.obj.toString());
}
};
private TextView textView; @Override
protected 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);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.login:
submit();
break;
}
} private void submit() {
// validate
String 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 something new Thread(new Runnable() {
@Override
public 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!任务完成!

Android http通信案例的更多相关文章

  1. Android实训案例(九)——答题系统的思绪,自己设计一个题库的体验,一个思路清晰的答题软件制作过程

    Android实训案例(九)--答题系统的思绪,自己设计一个题库的体验,一个思路清晰的答题软件制作过程 项目也是偷师的,决心研究一下数据库.所以写的还是很详细的,各位看官,耐着性子看完,实现结果不重要 ...

  2. Android实训案例(八)——单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局

    Android实训案例(八)--单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局 阿法狗让围棋突然就被热议了,鸿洋大神也顺势出了篇五子棋单机游戏的视频,我看到了就像膜拜膜拜,就 ...

  3. Android实训案例(六)——四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听

    Android实训案例(六)--四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听 Android中四大组件的使用时重中之重,我这个阶段也不奢望能把他 ...

  4. Android实训案例(五)——四大组件之一ContentProvider的使用,通讯录的实现以及ListView的优化

    Android实训案例(五)--四大组件之一ContentProvider的使用,通讯录的实现 Android四大组件是啥这里就不用多说了,看图吧,他们之间通过intent通讯 我们后续也会一一的为大 ...

  5. Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!

    Android实训案例(四)--关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程! 关于2048,我看到很多大神,比如医生,郭神,所以我也研究了一段时间,还好是研究 ...

  6. Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!

    Android实训案例(三)--实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果! 感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲 ...

  7. Android实训案例(二)——Android下的CMD命令之关机重启以及重启recovery

    Android实训案例(二)--Android下的CMD命令之关机重启以及重启recovery Android刚兴起的时候,着实让一些小众软件火了一把,切水果,Tom猫,吹裙子就是其中的代表,当然还有 ...

  8. Android实训案例(一)——计算器的运算逻辑

    Android实训案例(一)--计算器的运算逻辑 应一个朋友的邀请,叫我写一个计算器,开始觉得,就一个计算器嘛,很简单的,但是写着写着发现自己写出来的逻辑真不严谨,于是搜索了一下,看到mk(没有打广告 ...

  9. 【Arduino】开发入门【十】Arduino蓝牙模块与Android实现通信

    [Arduino]开发入门[十]蓝牙模块 首先show一下新入手的蓝牙模块 蓝牙参数特点 1.蓝牙核心模块使用HC-06从模块,引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机 ...

随机推荐

  1. vs中如何添加库目录、包含目录以及依赖-----转

    在生成时,可能需要首先生成某些项目,以便生成由其他项目使用的可执行代码.使用 “解决方案属性页”对话框 ->“通用属性”->“项目依赖项” 设置当前生成顺序.若要访问此对话框,请在“解决方 ...

  2. ubuntu16.04下安装kdevelop和汉化

    1.Kdevelop安装 最简单的命令行安装,打开终端,执行 sudo apt-get install kdevelop 2.Kdevelop汉化 不需要自己下载汉化包,Kdevelop安装后,在终端 ...

  3. 详解Oracle多种表连接方式

    1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不加限制) 3. 自连接(同一张表内的连接) SQL的标准语 ...

  4. npm的用户名添加不上的原因

    npm添加不上的错误e401 1.用cnpm提交,会提交的tao.org这个域名了,用npm提交试试 2.如果npm提交不上,那就查看配置文件配置中 registry=http://registry. ...

  5. nodejs(四)file System模块 解决Cross device link错误 EXDEV

    var fs = require('fs'); /*cross device link fs.rename('c:\\err.LOG','d:\\err.LOG',function(err){ con ...

  6. 01_Python 基础课程安排

    Python 基础课程安排 目标 明确基础班课程内容 课程清单 序号 内容 目标 01 Linux 基础 让大家对 Ubuntu 的使用从很 陌生 达到 灵活操作 02 Python 基础 涵盖 Py ...

  7. (1.3)mysql 事务控制和锁定语句

    (1.3)mysql 事务控制和锁定语句 lock table 参考转载自:https://www.cnblogs.com/kerrycode/p/6991502.html 关键词:mysql loc ...

  8. Hadoop自学笔记(三)MapReduce简单介绍

    1. MapReduce Architecture MapReduce是一套可编程的框架,大部分MapReduce的工作都能够用Pig或者Hive完毕.可是还是要了解MapReduce本身是怎样工作的 ...

  9. 图结构练习——判断给定图是否存在合法拓扑序列(sdutoj)

    #include<stdio.h>#include<string.h>int d[15],map[15][15],vis[15];int main(){    int i,j, ...

  10. AngularJS2.0起步

    ES6工具链 要让Angular2应用跑起来不是件轻松的事,因为它用了太多还不被当前主流浏览器支持的技术.所以,我们需要一个工具链: