当前位置 : 主页 > 编程语言 > java >

Android http通信案例

来源:互联网 收集:自由互联 发布时间:2022-06-30
Android studio 编写安卓程序,实现 http 通信,获得百度主页源代码。 ------------------------------------------------------------- ------------------------------------------------------------ 不要惊讶,这是一条手动


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

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

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

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

 

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

Android http通信案例_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>

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

Android http通信案例_android_02

 

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了,不往下运行,代码很明白!输完之后点击按钮就出现效果了。大功告成!

Android http通信案例_java_03

 

 

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

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

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

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

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

 

OK!任务完成! 

 

【版权声明】本博文著作权归作者所有,任何形式的转载都请联系作者获取授权并注明出处!

【重要说明】本文为本人的学习记录,论点和观点仅代表个人而不代表当时技术的真理,目的是自我学习和有幸成为可以向他人分享的经验,因此有错误会虚心接受改正,但不代表此刻博文无误!

【Gitee地址】秦浩铖:​​https://gitee.com/wjw1014​​


上一篇:Arduino使用HC05蓝牙模块与手机连接
下一篇:没有了
网友评论