天天看点

java的回调机制实例讲解

前言:
在开发的过程中,一些方法可能经常需要用到,但我们不可能每次都写一遍,这时候我们需要新建一个公共的类,在这个类里面写上方法,然后用public static修饰,可是当这个方法执行的是耗时操作的时候,我们需要开启子线程,可是在子线程里又不可以使用return,这是我们就需要使用java的回调机制来解决这个问题。
操作步骤:

1.新建一个回调接口

2.新建类,编写带有回调的方法。

3.在java代码中调用新建类中的方法。

效果展现:
java的回调机制实例讲解

代码实现:

1.新建一个回调接口
public interface SumCallbackListener {
    //新建一个回调方法
    void onfinish(int sum);
}
           
2.新建类,编写带有回调的方法。
public class CalculateUtil {
   //param1:传过来的输入的值    param2:新建回调对象
    public static void requestCalculateSum(final int number,final SumCallbackListener listener){
        //开启子线程,在这里只是模拟耗时操作
        new Thread(new Runnable() {
            @Override
            public void run() {
                int result = ;
                for(int i =;i<=number;i++){
                    result+= i;
                }
                //回调onfinish()方法
                listener.onfinish(result);
            }
        }).start();

    }
}
           
3.在java代码中调用新建类中的方法。

1.首先是我的界面布局:

<?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"
    android:orientation="vertical"
    tools:context="com.example.networktest.Main2Activity">

    <EditText
        android:id="@+id/main_et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入一个正整数"
        android:inputType="number"/>
    <Button
        android:id="@+id/main_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="0到这个数之间的所有整数和求和"/>
    <TextView
        android:id="@+id/main_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="结果"
        android:gravity="center"
        android:textSize="25sp"/>


</LinearLayout>
           

2.java代码部分:

public class Main2Activity extends AppCompatActivity {

    private EditText inputEt;
    private Button calculateBtn;
    private TextView resultTv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        bindID();

        calculateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int input = Integer.parseInt(inputEt.getText().toString());
                //调用公共类的公共方法
                CalculateUtil.requestCalculateSum(input, new SumCallbackListener() {
                    @Override
                    public void onfinish(int sum) {
                        //根据回调的内容执行具体的方法
                        resultTv.setText(sum+"");
                    }
                });
            }
        });
    }

    private void bindID() {
        inputEt = findViewById(R.id.main_et);
        calculateBtn = findViewById(R.id.main_btn);
        resultTv = findViewById(R.id.main_tv);
    }
}
           
over