安卓控制新大陆云平台(一)

前言

由于要参加比赛,因此必须学会用安卓来控制新大陆云平台,后期还会用C#控制,最后更新STM32部分代码

新大陆云平台官网:http://www.nlecloud.com/

本章主要先介绍如何写一个安卓登录云平台的程序.

使用C#封装了部分API 部分API接口
部分封装的安卓SDK会在后续给出




一、云平台介绍

首先,我们从云平台的官网来看,如下图所示
在这里插入图片描述
先查看部分接口,可以知道我们要先登录获取AccessToken才能进行后续的操作

在这里插入图片描述
我们用post请求之后,可以获得对应的AccessToken




二、安卓开发介绍

这里,我假设大家掌握的基础是基本的布局和控件使用

首先,我们先去官网下载新大陆云平台的Sdk
在这里插入图片描述
接着,在Android studio中import Module
在这里插入图片描述
接下来,对新导入的模块build
在这里插入图片描述
成功后如下图所示
在这里插入图片描述
如果导入nlecloud-sdk的包不存在,尝试以下操作
在build.gradle(Module.app)中加入如下语句

在这里插入图片描述
布局文件,大致如下

在这里插入图片描述

由于代码比较简单,这里我就不贴出布局文件的代码了

接下来就是使用安卓来登录云平台,在这里,大家如果理解网页上如何使用post请求登录云平台的话,那么这里就会变得非常简单。
首先,先看部分函数代码
在这里插入图片描述
我们在nlecloud-sdk中找到如下类,NewWorkBusiness,可以知道该类的包含了一个signIn登录函数,那么我们就需要使用这个类来登录新平台,该类,调用了apiService的signIn函数,我们接着往下看apiService类

在这里插入图片描述
看着很复杂,实际上,我们一点一点的理解,首先该类是一个api服务类,有点像第一张图的那样,该方法返回的是一个responseEntity,而ResponseEntity :标识整个http相应:状态码、头部信息、响应体内容(spring)。基本意思就是这样,大致理解就是一个请求网页的响应,分析结束




代码如下

	public class MainActivity extends AppCompatActivity {
    private EditText username;   //账户
    private EditText password;  //密码
    private Button login;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //登录
        login = (Button) findViewById(R.id.login);
        username = (EditText)findViewById(R.id.username);
        password = (EditText)findViewById(R.id.password);
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                signIn();
            }
        });
    }
    private void signIn(){
        String platformAddress = "http://api.nlecloud.com:80/";
        final String _username = username.getText().toString();// "17674738454";
        final String _password = password.getText().toString();//"123456";
        if (_username.equals("") || _password.equals("")){
            Toast.makeText(this,"用户名或密码不为空",Toast.LENGTH_SHORT).show();
            return ;
        }
        final NetWorkBusiness netWorkBusiness = new NetWorkBusiness("",platformAddress);
        netWorkBusiness.signIn(new SignIn(_username, _password), new Callback<BaseResponseEntity<User>>() {
            @Override
            public void onResponse(@NonNull Call<BaseResponseEntity<User>> call, @NonNull Response<BaseResponseEntity<User>> response) {
                BaseResponseEntity<User> baseResponseEntity = response.body();	//获得响应体
                if (baseResponseEntity != null) {
                    if (baseResponseEntity.getStatus() == 0) {
                        //需要传输秘钥
                        String accessToken = baseResponseEntity.getResultObj().getAccessToken();        //json数据返回
                        Intent intent = new Intent(MainActivity.this, MenuActivity.class);
                        Bundle bundle = new Bundle();
                        bundle.putString("accessToken", accessToken);
                        intent.putExtras(bundle);
                        startActivity(intent);
                        finish();
                    } else {
                        Toast.makeText(MainActivity.this, baseResponseEntity.getMsg(), Toast.LENGTH_SHORT).show();  //返回为空...
                    }
                }
            }
            @Override
            public void onFailure(Call<BaseResponseEntity<User>> call, Throwable t) {
                Toast.makeText(MainActivity.this,"登录失败 " + t.getMessage(),Toast.LENGTH_SHORT).show();
            }
        });
    }
}



几个问题

1 由于该应用是一个联网应用,必须请求网络权限,添加如下语句

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

2 一开始不知道怎么回事,一直登陆失败,尝试在onFailure中显示错误信息t.getMessage(),结果得到的反馈是

java.net.UnknownServiceException: CLEARTEXT communication ** not
permitted by network security polic

百度了一下,得到的问题是Android P http网络请求的问题

Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。

解决方法如下:

在 res 下新增一个 xml 目录,然后创建一个名为:network_security_config.xml 文件(名字自定) ,内容如下,大概意思就是允许开启http请求

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

然后在APP的AndroidManifest.xml文件下的application标签增加以下属性

<application
...
 android:networkSecurityConfig="@xml/network_security_config"
...
    />



总结

遇到问题要学会使用debug,不然都不知道问题出现在哪里

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值