如何在后台任务中从 Java Android 中的 AsyncTask void onPostExecute() 方法返回结果? 当委托(delegate)模式拯救我的生命拯救我的生命时,我花了很多天的时间来寻找它。什么时候从 StackOverFlow 找到这里的。
我的主线程有一个 CsvUtil.getCompanies() 方法,需要返回一个列表,而 getCompanies() 调用一个 ReadLine 类,该类使用来自云端的 Google Sheet。
public static final class ParseLine extends AsyncTask<String, Integer, String[]> {
private TaskDelegate delegate;
public ParseLine(TaskDelegate delegate) {
this.delegate = delegate;
}
public interface TaskDelegate {
public void onTaskEndWithResult(String[] parseLine);
}
@Override
protected String[] doInBackground(String... nextLine) {
try {
return parseLine(nextLine[0]);
} catch (IOException ex) {
Log.e("CsvReader", ex.getMessage());
}
return null;
}
@Override
protected void onPostExecute(String[] parseLine) {
if (parseLine != null && delegate != null)
delegate.onTaskEndWithResult(parseLine);
}
}
private static final class GetNextLine extends AsyncTask<Void, Integer, String>
implements ParseLine.TaskDelegate {
private List<String[]> list;
public GetNextLine(List<String[]> l) {
list = l;
}
@Override
protected String doInBackground(Void... companies) {
try {
return getNextLine();
} catch (IOException ex) {
Log.e("CsvReader", ex.getMessage());
}
return null;
}
@Override
protected void onPostExecute(String nextLine) {
if (nextLine != null) {
ParseLine parseLine = new ParseLine(this);
parseLine.execute(nextLine);
}
}
@Override
public void onTaskEndWithResult(String[] parseLine) {
list.add(parseLine);
}
}
最佳答案
private static class BackgroundTask extends AsyncTask<Void, Void, Void>{
private static WeakReference<MainActivity> activityRef ;
public BackgroundTask(MainActivity activity){
activityRef = new WeakReference<>(activity);
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
MainActivity activity = activityRef.get();
if (activity != null && !activity.isFinishing()){
//Talk to activity
}
}
}
你可以这样做:
(我不完全理解你的问题,但是我在哪里发现你希望与 asyncTask 中的下划线 Activity 进行对话,如果你希望与 asyncTask 进行相反的 Activity ,你可以使用接口(interface)方法或模型 View 模型方法)
关于java - Android Java 从后台线程中的异步任务返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58885204/