Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java asynctask类未将数据返回到片段_Java_Android_Api_Android Asynctask_Retrofit - Fatal编程技术网

Java asynctask类未将数据返回到片段

Java asynctask类未将数据返回到片段,java,android,api,android-asynctask,retrofit,Java,Android,Api,Android Asynctask,Retrofit,我正在尝试从AsyncTask类中的API获取数据,并将数据返回到一个片段,该片段中的数据显示在RecyclerView中。但是is数据总是空的,片段总是空的 看看我的代码 我的异步任务类: public class EmployeesData extends AsyncTask<Void, Void, List<Employee>>{ List<Employee> data = new ArrayList<>(); EmployeesFragm

我正在尝试从AsyncTask类中的API获取数据,并将数据返回到一个片段,该片段中的数据显示在RecyclerView中。但是is数据总是空的,片段总是空的

看看我的代码

我的异步任务类:

public class EmployeesData extends AsyncTask<Void, Void, List<Employee>>{

List<Employee> data = new ArrayList<>();
EmployeesFragment emp;

public EmployeesData (EmployeesFragment emp){
    this.emp= emp;
}


@Override
protected List<Employee> doInBackground(Void... arg0) {
    RestService restService = new RestService();
    try {

        restService.getService().getEmployees(new Callback<List<Employee>>() {

            @Override
            public void success(List<Employee> employee, Response response) {

                data = employee;
            }

            @Override
            public void failure(RetrofitError error) {
                Toast.makeText(emp.getContext(), error.getMessage().toString(), Toast.LENGTH_LONG).show();
            }
        });
    } catch (Exception ex) {
        Toast.makeText(emp.getContext(), ex.getMessage().toString(), Toast.LENGTH_LONG).show();

    }
    return data;
}

@Override
protected void onPostExecute(List<Employee> data) {
    super.onPostExecute(data);
    emp.setList(data);
}
}
我的员工服务界面:

public interface EmployeesService {
    @GET("/api/employees")
    public void getEmployees(Callback<List<Employee>> callback);
}
有人能指出我哪里出了问题吗?我很感激你的帮助


谢谢你

首先,你不需要改装

可能就是这样

private EmployeesRvAdapter adapter;

public void fireYourAsyncTask() {

    EmployeesService service = new RestService().getService();
    try {

        service.getEmployees(new Callback<List<Employee>>() {

            @Override
            public void success(List<Employee> employee, Response response) {
                employees.clear();
                employees.addAll(employee);
                adapter.notifyDatSetChanged();
            }

            @Override
            public void failure(RetrofitError error) {
                Toast.makeText(emp.getContext(), error.getMessage().toString(), Toast.LENGTH_LONG).show();
            }
        });
无论在何处添加数据,这都不是添加到ArrayList的方式

employees= data;
这就是重新分配。这是加法

employees.clear();
employees.addAll(data);

谢谢它工作得很好。您能告诉我们如何将从API获取的数据存储为缓存数据,以便即使在脱机时也可以访问它吗?简短回答:SQLite、Realm database或Firebase。尽管如此,请随意发布一个单独的问题
private EmployeesRvAdapter adapter;

public void fireYourAsyncTask() {

    EmployeesService service = new RestService().getService();
    try {

        service.getEmployees(new Callback<List<Employee>>() {

            @Override
            public void success(List<Employee> employee, Response response) {
                employees.clear();
                employees.addAll(employee);
                adapter.notifyDatSetChanged();
            }

            @Override
            public void failure(RetrofitError error) {
                Toast.makeText(emp.getContext(), error.getMessage().toString(), Toast.LENGTH_LONG).show();
            }
        });
public class EmployeesFragment extends Fragment implements Callback<List<Employee>> {
public void fireYourAsyncTask() {
    EmployeesService service = new RestService().getService();
    service.getEmployees(this);
}
employees= data;
employees.clear();
employees.addAll(data);