java.util.arraylist 无法转换为 java.lang.object[]

java.util.arraylist cannot be cast to java.lang.object[]

所以在我下面的代码中,标有 *** 的行给了我异常

java.util.arraylist cannot be cast to java.lang.object[]

我正在尝试从 backendless 中检索用户列表。我创建了一个列表视图,该视图在正常添加到列表时有效。但不是在尝试获得响应时(对象)

public class UserRolesActivity extends AppCompatActivity {

    ListView userListView;
    TextView changeRoleTv;
    List<String> list;

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

        userListView = (ListView) findViewById(R.id.usersListView);
        list = new ArrayList<>();
        changeRoleTv = (TextView) findViewById(R.id.chooseUserChangeTv);

        Backendless.Data.mapTableToClass("Users", Users.class);

        list.add("Name1");
        list.add("Name2");

        RetrieveUsers retrieveUsers = RetrieveUsers.getInstance();

        retrieveUsers.getUsersAsync(new AsyncCallback<Object>() {
            @Override
            public void handleResponse(Object response) {

                try{
                 ***   Object [] result = (Object []) response;   ***
                    List<Object> user = Arrays.asList(result);

                    for (int i = 0; i< user.size(); i++){

                        if (user.get(i) != null){
                            list.add(((Learner) user.get(i)).getFirstName().toString() + ": " + ((Learner) user.get(i)).getLastName().toString());
                        }
                    }

                }catch (Exception e){
                    ShowToast(e.getMessage().toString());
                }

                userListView.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, list));


            }

            @Override
            public void handleFault(BackendlessFault fault) {
                ShowToast(fault.getMessage());
            }
        });

    }

    private  void ShowToast(String message)
    {
        Toast.makeText(this, message, LENGTH_LONG).show();
    }

}

响应的类型 java.uti.ArrayList 包装在对象类型下。你不能投
Arraylist 到对象数组。

你做的事情看起来有点啰嗦:

***   Object [] result = (Object []) response;   ***
List<Object> user = Arrays.asList(result);

    for (int i = 0; i< user.size(); i++){

       if (user.get(i) != null){
           list.add(((Learner) user.get(i)).getFirstName().toString() + ": " + ((Learner) user.get(i)).getLastName().toString());
       }
    }

可以同意:

List<?> users = (List<?>)response;
for (Object user : users) {
    if (user != null){
        // Some stuff
    }
}

接下来您将遇到以下问题:

       list.add(((Learner) user.get(i)).getFirstName().toString() + ": " + ((Learner) user.get(i)).getLastName().toString());

因为 user.get(i)).getFirstName().toString() + ": " 是一个字符串,然后您将其转换为类型 Learner。你需要重新考虑这一点。

您可以将结果定义为

Object[] arr = new Object[]{...};

要将 List<Object> 转换为对象数组,请使用 .toArray() 方法:

Object[] result = response.toArray();

这就是原始异常的解决方案。