244,带你快速通过字节跳动面试

#include <com_ldw_hello_BridgeUtils.h>

void JNI_show()

{

__android_log_print(ANDROID_LOG_ERROR,“jni_show”, “Function from FunUtils.cpp form void funciotn”);

return;

}

#ifdef __cplusplus

extern “C” {

#endif

/*

  • Class: com_ldw_hello_BridgeUtils

  • Method: hello_jni

  • Signature: ()V

*/

JNIEXPORT void JNICALL Java_com_ldw_hello_BridgeUtils_hello_1jni

(JNIEnv * env, jobject obj)

{

//return env->NewStringUTF(“Function from FunUtils.cpp”);

JNI_show();

}

/*

  • Class: com_ldw_hello_BridgeUtils

  • Method: hello_jni_string

  • Signature: ()Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_com_ldw_hello_BridgeUtils_hello_1jni_1string

(JNIEnv * env, jobject obj)

{

return env->NewStringUTF(“Function from FunUtils.cpp”);

}

#ifdef __cplusplus

}

#endif

login.cpp模拟向服务器发送json数据,同时服务器返回一个JNI的数据JNI_TURE,来作为返回值返回到java层,完成登录成功的过程

//

// Created by Administrator on 2019/10/13.

//

#include “login.h”

#include <android/log.h>

/*

  • Class: com_ldw_hello_BridgeUtils

  • Method: login

  • Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z

*/

JNIEXPORT jboolean JNICALL Java_com_ldw_hello_BridgeUtils_login

(JNIEnv * env, jobject obj, jstring jni_username, jstring jni_password, jboolean jni_isdriver)

{

const char *username = env->GetStringUTFChars(jni_username, 0);

const char *passwd = env->GetStringUTFChars(jni_password, 0);

const char *isDriver = jni_isdriver == JNI_TRUE?“yes”:“no”;

__android_log_print(ANDROID_LOG_ERROR,TAG,“JNI-login: username = %s, passwd = %s, isDriver = %s”,

username, passwd, isDriver);

//封装一个数据协议

/*

给服务端的协议

http://ip:port/login [json_data]

{

username: “gailun”,

password: “123123”,

driver: “yes”

}

  • */

//(1)封装一个json字符串

//(2) 想web服务器 发送http请求 其中post数据 json字符串

//(3) 等待服务器的响应

/*

//成功

{

result: “ok”,

}

//失败

{

result: “error”,

reason: “why…”

}

  • */

//(4) 解析服务器返回的json字符串

return JNI_TRUE;

}

LoginActivity.java截取部分代码如下

boolean login_result = true;

//调用jni函数的方法,将用户的信息发送给服务器,服务器返回相关信息

login_result = BridgeUtils.getInstance().login(username, password, isDriver);

//将用户名的信息递交给服务器,服务器返回结果login_result,放在login_result中

if(login_result == true){

if(isDriver){

startActivity(new Intent(getApplicationContext(), DriverActivity.class));

}else{

startActivity(new Intent(getApplicationContext(), PassengerActivity.class));

}

//登录成功

Log.e(LOG_TAG, “登录成功!!! username=” + username + “|||password=” + password);

}else {

//登录失败

Log.e(LOG_TAG, “登录失败!!! username=” + username + “|||password=” + password);

}

完整代码如下:

package com.ldw.hello;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.CheckBox;

import android.widget.CompoundButton;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.Toast;

public class LoginActivity extends AppCompatActivity {

private TextView tv_username, tv_password;

private EditText et_name, et_pass;

private Button bt_login, bt_register;

private String username, password;

private CheckBox cb_driver;

private boolean isDriver = false;

private String LOG_TAG = “LoginActivity===”;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_login);

initUI();

cb_driver.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

if(isChecked){

isDriver = true;

Log.e(LOG_TAG, “是司机!!! username=” + username + “|||password=” + password);

}else {

isDriver = false;

Log.e(LOG_TAG, “是乘客!!! username=” + username + “|||password=” + password);

}

}

});

bt_login.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

boolean login_result = true;

username = et_name.getText().toString();

password = et_pass.getText().toString();

if(username == “”){

Log.e(LOG_TAG, “username 是空的”);

Toast.makeText(LoginActivity.this, “username 是空的” , Toast.LENGTH_SHORT).show();

return;

}else if(password == “”){

Log.e(LOG_TAG, “password 是空的”);

Toast.makeText(LoginActivity.this, “password 是空的” , Toast.LENGTH_SHORT).show();

return;

}

//调用jni函数的方法,将用户的信息发送给服务器,服务器返回相关信息

login_result = BridgeUtils.getInstance().login(username, password, isDriver);

//将用户名的信息递交给服务器,服务器返回结果login_result,放在login_result中

if(login_result == true){

if(isDriver){

startActivity(new Intent(getApplicationContext(), DriverActivity.class));

}else{

startActivity(new Intent(getApplicationContext(), PassengerActivity.class));

}

//登录成功

Log.e(LOG_TAG, “登录成功!!! username=” + username + “|||password=” + password);

}else {

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整资料开源分享

//登录失败

Log.e(LOG_TAG, “登录失败!!! username=” + username + “|||password=” + password);

}

}

});

bt_register.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Log.e(LOG_TAG, "用户注册!!! ");

Intent intent = new Intent();

intent.setClass(getApplicationContext(), RegisterActivity.class);

startActivity(intent);

}

});

}

public void initUI(){

tv_username = (TextView) findViewById(R.id.tv_username);

tv_password = (TextView) findViewById(R.id.tv_password);

bt_login = (Button) findViewById(R.id.bt_login);

最后

针对于上面的问题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

244,带你快速通过字节跳动面试

}

public void initUI(){

tv_username = (TextView) findViewById(R.id.tv_username);

tv_password = (TextView) findViewById(R.id.tv_password);

bt_login = (Button) findViewById(R.id.bt_login);

最后

针对于上面的问题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

[外链图片转存中…(img-4RvE1jUB-1640573408867)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

上一篇:微信小程序的登录和注册-前后端交互(springboot)


下一篇:【数据库bug修复】——Authentication plugin ‘caching_sha2_password‘ is not supported