• Android http通信案例


    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!任务完成! 

    【版权声明】本博文著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处!
    【重要说明】本文为本菜鸟的学习记录,论点和观点仅代表个人不代表此技术的真理,目的是学习和可能成为向别人分享的经验,因此有错误会虚心接受改正,但不代表此时博文无误!
    【博客园地址】JayveeWong: http://www.cnblogs.com/wjw1014
    【CSDN地址】JayveeWong: https://blog.csdn.net/weixin_42776111
    【Gitee地址】Jayvee:https://gitee.com/wjw1014
    【GitHub地址】Jayvee:https://github.com/wjw1014
  • 相关阅读:
    站立会议(二)
    站立会议(一)
    买书优惠问题
    软件的NABCD----安装部分
    你的灯亮着吗读书笔记(一)
    软件工程概论---环状二维数组最大子数组和
    梦断代码读书笔记(三)
    梦断代码读书笔记(二)
    课程作业3.10
    软件工程作业提交3.06
  • 原文地址:https://www.cnblogs.com/wjw1014/p/8863691.html
Copyright © 2020-2023  润新知