NDK--java与C++的交互实现简单计算器

  • 下载NDK并且安装:
    在这里插入图片描述
  • 创建NDK任务:
    在这里插入图片描述
    在这里插入图片描述
  • 创建完成后的文件夹样式:
    在这里插入图片描述

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical"
    >
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入第一个数字:"
        android:id="@+id/one_num"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入符号:"
        android:id="@+id/js_fh"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入第二个数字:"
        android:id="@+id/two_num"
        />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/get"
        android:text="计算求值"
        />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:id="@+id/sum"

        />
</LinearLayout>

java代码:

package com.example.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextView onenum;
    private TextView twonum;
    private TextView fh_num;
    private Button get;
    private TextView textView;
    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("native-lib");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Example of a call to a native method

        onenum = findViewById(R.id.one_num);
        twonum = findViewById(R.id.two_num);
        fh_num = findViewById(R.id.js_fh);
        textView = findViewById(R.id.sum);
        get = findViewById(R.id.get);

        get.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num1 = Integer.parseInt(onenum.getText().toString());
                int num2 = Integer.parseInt(twonum.getText().toString());
                char[] fh = fh_num.getText().toString().toCharArray();
                int sum = getNum(num1, num2, fh[0]);
                textView.setText("计算的值为:"+sum+"");
            }
        });
    }

    /**
     * A native method that is implemented by the 'native-lib' native library,
     * which is packaged with this application.
     */
    public native String stringFromJNI();
    public native int getNum(int a,int b,char fh);
}

C++代码:

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++ 这是C的文件";
    return env->NewStringUTF(hello.c_str());
}
extern "C"
JNIEXPORT jint JNICALL
Java_com_example_myapplication_MainActivity_getNum(JNIEnv *env, jobject instance, jint a, jint b,jchar fh) {
    // TODO

    switch (fh){
        case '+':
            return a+b;
        case '-':
            return a-b;
        case '*':
            return a*b;
        case '/':
            return a/b;
    }
    return 0;
}

效果图:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44946212/article/details/96899691
今日推荐