前言:
在开发的过程中,一些方法可能经常需要用到,但我们不可能每次都写一遍,这时候我们需要新建一个公共的类,在这个类里面写上方法,然后用public static修饰,可是当这个方法执行的是耗时操作的时候,我们需要开启子线程,可是在子线程里又不可以使用return,这是我们就需要使用java的回调机制来解决这个问题。
操作步骤:
1.新建一个回调接口
2.新建类,编写带有回调的方法。
3.在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);
}
}