在AsyncTask中,可以通过以下几种方式将值传回activity类:
public interface AsyncTaskListener {
void onTaskComplete(String result);
}
public class MyAsyncTask extends AsyncTask<Void, Void, String> {
private AsyncTaskListener listener;
public MyAsyncTask(AsyncTaskListener listener) {
this.listener = listener;
}
@Override
protected String doInBackground(Void... voids) {
// 后台任务逻辑
return "结果";
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
listener.onTaskComplete(result);
}
}
public class MainActivity extends AppCompatActivity implements AsyncTaskListener {
private TextView resultTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resultTextView = findViewById(R.id.resultTextView);
MyAsyncTask myAsyncTask = new MyAsyncTask(this);
myAsyncTask.execute();
}
@Override
public void onTaskComplete(String result) {
resultTextView.setText(result);
}
}
public class MyAsyncTask extends AsyncTask<Void, Void, String> {
private Context context;
public MyAsyncTask(Context context) {
this.context = context;
}
@Override
protected String doInBackground(Void... voids) {
// 后台任务逻辑
return "结果";
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Intent intent = new Intent("com.example.RESULT_ACTION");
intent.putExtra("result", result);
context.sendBroadcast(intent);
}
}
public class MainActivity extends AppCompatActivity {
private TextView resultTextView;
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String result = intent.getStringExtra("result");
resultTextView.setText(result);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resultTextView = findViewById(R.id.resultTextView);
IntentFilter filter = new IntentFilter("com.example.RESULT_ACTION");
registerReceiver(receiver, filter);
MyAsyncTask myAsyncTask = new MyAsyncTask(this);
myAsyncTask.execute();
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
}
public class MyAsyncTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... voids) {
// 后台任务逻辑
return "结果";
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
EventBus.getDefault().post(new TaskCompleteEvent(result));
}
}
public class TaskCompleteEvent {
private String result;
public TaskCompleteEvent(String result) {
this.result = result;
}
public String getResult() {
return result;
}
}
public class MainActivity extends AppCompatActivity {
private TextView resultTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resultTextView = findViewById(R.id.resultTextView);
EventBus.getDefault().register(this);
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute();
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onTaskComplete(TaskCompleteEvent event) {
resultTextView.setText(event.getResult());
}
}
以上是三种常用的方式,可以根据具体需求选择适合的方式将值传回activity类。
领取专属 10元无门槛券
手把手带您无忧上云