【php + MySQL + Android】一个超简单的Http实践

【php + MySQL + Android】一个超简单的Http实践

前言

自己要做一个 App,涉及到服务器端的用户数据管理,而网络上的的资源往往是只讲一个方面。所以自己每完成一段工作,会将开发过程记录下来,并供大家参考,相关文章放在专栏

【php + MySQL + 】。

如果你遇到了什么问题android+php最佳实践,或者有好的建议【php + MySQL + Android】一个超简单的Http实践,欢迎在评论区留言,或者私信我【php + MySQL + Android】一个超简单的Http实践,大家一起交流。

作者也是小白,期待与你一起成长。

————————————————————————独学而无友,则孤陋而寡闻

目录

因为项目要设计到网络传输,而一开始就用HTTPS 以及post方法,对小白来说跨度比较大,不能很好的理解原理,所以写了一个简单实例,用来理解HTTP网络传输的要点,为接下来的工作做准备。

功能描述

利用上一章节写的登陆界面,来获取服务器端的文本资源(自己没服务器也不要紧,用我的链接也是可以的,长久有效)android+php最佳实践,并且显示出来。

android+php最佳实践

点一下上面登录按钮,显示来自服务器的文本。UI界面在这篇文章里:

【php + MySQL + 】登陆界面设计(1)_勇敢di牛牛的博客-CSDN博客

关键代码讲解

android+php最佳实践

建立http连接的关键步骤整理:

InputStreamReader in = new InputStreamReader(urlCon.getInputStream());
BufferedReader buffer = new BufferedReader(in);

:将一个字节的输入流转换为字符的输入流

:将一个字符的输出流转换为字节的输出流

作用:提供字节流与字符流之间的转换

解码:字节、字节数组  —>字符数组、字符串       看不懂的转换为看的懂的

编码:字符数组、字符串 —> 字节、字节数组      看的懂的转换为看不懂的

 new Thread(new Runnable(){
            public void run(){
                try {
                    URL myurl = new URL(stringUrl);
                    HttpURLConnection urlCon = (HttpURLConnection)myurl.openConnection();
                    urlCon.setConnectTimeout(3000);
                    InputStreamReader in = new InputStreamReader(urlCon.getInputStream());
                    BufferedReader buffer = new BufferedReader(in);
                    String inputLine = null;
                    StringBuffer pageBuffer = new StringBuffer();
(pageBuffer.toString().getBytes(StandardCharsets.UTF_8));
                    txt = buffer.readLine();
                    //txt = txt.substring(0,txt.length());
                    mHander.sendEmptyMessage(0);
                    in.close();
                    buffer.close();
                    urlCon.disconnect();
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                    mHander.sendEmptyMessage(1);
                } catch (IOException e) {
                    mHander.sendEmptyMessage(1);
                    e.printStackTrace();
                }
            }
        }).start();
    }

像这种网络请求和文件读写的操作放在主线程会影响我们的主交互的性能效果,是不被允许的,所以要新开一个线程。

这里实际上是通过实现接口的run方法去创建多线程。并new了一个线程对象。

*别忘记后面的start()方法

private static final int SUCCESS = 0;
    private static final int FAILURE = 1; //
    private String txt;
    String stringUrl = "http://nnggb.com/test/test.txt";
    private Handler mHander = new Handler(Looper.getMainLooper()) {
        @SuppressLint("SetTextI18n")
        public void handleMessage(Message msg) {
            switch(msg.what){
                case SUCCESS:
                    edt_user.setText(txt);
                    break;
                case FAILURE:
                    edt_user.setText("download fail");
                    break;
            }
        }
    };

这里进行处理消息操作。 当前线程如果是主线程的话,使用

Handler handler = new Handler();

不是主线程的话,

Handler handler = new Handler(Looper.getMainLooper()); 

android+php最佳实践

我们新开的进程会发一个消息出来,这个函数就是去处理发给我们的消息;

.()就是放在主线程去执行。

    private static final int SUCCESS = 0;
    private static final int FAILURE = 1; //

final是java关键字,被final修饰的变量值无法改变,代表“终态”的意思,这里是静态android+php最佳实践,我们后面要不停的去判断新线程是否有消息过来,这种写法不会去不断地开辟新的内存,大大提高我们的性能与流畅度。

捕获异常

这里的两种异常都需要捕获,要不然是会报错的,这里捕获的信息,会在我们run的时候显示出来,方便我们调试。

android+php最佳实践

代码(注意第一行的名字)

package com.example.testapp;
import static java.util.Base64.*;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.text.Editable;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class MainActivity extends Activity {
    Button btn_login;
    Button btn_register;
    EditText edt_user;
    EditText edt_password;
    URL url1;
    private Handler handler;
    private String result = "";
    private EditText content;
    private static final int SUCCESS = 0;
    private static final int FAILURE = 1; //
    private String txt;
    String stringUrl = "http://nnggb.com/test/test.txt";
    private Handler mHander = new Handler(Looper.getMainLooper()) {
        @SuppressLint("SetTextI18n")
        public void handleMessage(Message msg) {
            switch(msg.what){
                case SUCCESS:
                    edt_user.setText(txt);
                    break;
                case FAILURE:
                    edt_user.setText("download fail");
                    break;
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_login = findViewById(R.id.bt_login);
        btn_register = findViewById(R.id.bt_register);
        edt_user = findViewById(R.id.edt_user);
        edt_password =findViewById(R.id.edt_password);
        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                GetURLResources();
            }
        });
    }
    public void GetURLResources(){
        new Thread(new Runnable(){
            public void run(){
                try {
                    URL myurl = new URL(stringUrl);
                    HttpURLConnection urlCon = (HttpURLConnection)myurl.openConnection();
                    urlCon.setConnectTimeout(3000);
                    InputStreamReader in = new InputStreamReader(urlCon.getInputStream());
                    BufferedReader buffer = new BufferedReader(in);
                    String inputLine = null;
                    StringBuffer pageBuffer = new StringBuffer();
//                    while((inputLine = buffer.readLine()) != null){
//                        pageBuffer.append(inputLine +"n");
//                    };
                    //设置字符编码格式
                    //txt = new String (pageBuffer.toString().getBytes(StandardCharsets.UTF_8));
                    txt = buffer.readLine();
                    //txt = txt.substring(0,txt.length());
                    mHander.sendEmptyMessage(0);
                    in.close();
                    buffer.close();
                    urlCon.disconnect();
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                    mHander.sendEmptyMessage(1);
                } catch (IOException e) {
                    mHander.sendEmptyMessage(1);
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

可能出现的错误:

android+php最佳实践

连接网络添加如下权限在文件里:

android+php最佳实践

android+php最佳实践

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » 【php + MySQL + Android】一个超简单的Http实践

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们