Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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 如何使Jackson对象映射器映射到多个输出类并选择正确的输出类?_Java_Android_Json_Api - Fatal编程技术网

Java 如何使Jackson对象映射器映射到多个输出类并选择正确的输出类?

Java 如何使Jackson对象映射器映射到多个输出类并选择正确的输出类?,java,android,json,api,Java,Android,Json,Api,我有一个Android应用程序使用用户身份验证API(www.example.com/user_login.php?username=xxx&password=xxx),如果用户的登录信息正确,API将返回json包含用户对象(名称、电子邮件…),如果不正确,则返回json包含错误对象(类型、描述…) 如何根据API结果使用正确的类(用户、错误)进行ObjectMapper映射我正在使用以下代码: public class UserLoginTask extends AsyncTask<V

我有一个Android应用程序使用用户身份验证API(www.example.com/user_login.php?username=xxx&password=xxx),如果用户的登录信息正确,API将返回json包含用户对象(名称、电子邮件…),如果不正确,则返回json包含错误对象(类型、描述…)

如何根据API结果使用正确的类(用户、错误)进行ObjectMapper映射
我正在使用以下代码:

public class UserLoginTask extends AsyncTask<Void, Void, User> {

    private final ObjectMapper mMapper;
    private final ContentValues mParam;

    UserLoginTask(String username, String password) {
        mMapper = new ObjectMapper();
        mParam = new ContentValues();
        mParam.put("username", username);
        mParam.put("password", password);
    }

    @Override
    protected User doInBackground(Void... params) {
        // TODO: attempt authentication against a network service.
        User user = null;
        try {
            user = mMapper.readValue(new URL(Settings.BASE_URL + Settings.LOGIN_API + Utils.URLFormat(mParam, "UTF-8")), User.class); // here I have to use correct class (User or Error)
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  user;
    }

    @Override
    protected void onPostExecute(User user) {
        mAuthTask = null;
        showProgress(false);

        if (user.success) {
            SessionManager.createLoginSession(user.fullname, user.mail, user.photo, user.token);
            Intent i = new Intent(getApplicationContext(), MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            getApplicationContext().startActivity(i);
            finish();
        } else {
            mPasswordView.setError(getString(R.string.error_incorrect_password));
            mPasswordView.requestFocus();
        }
    }

    @Override
    protected void onCancelled() {
        mAuthTask = null;
        showProgress(false);
    }
}
public类UserLoginTask扩展异步任务{
私有最终对象映射器mMapper;
私有最终内存;
UserLoginTask(字符串用户名、字符串密码){
mMapper=newObjectMapper();
mParam=新的ContentValues();
mParam.put(“用户名”,用户名);
mParam.put(“密码”,password);
}
@凌驾
受保护的用户doInBackground(无效…参数){
//TODO:尝试对网络服务进行身份验证。
User=null;
试一试{
user=mMapper.readValue(新URL(Settings.BASE\u URL+Settings.LOGIN\u API+Utils.URLFormat(mParam,“UTF-8”)),user.class);//这里我必须使用正确的类(用户或错误)
}捕获(IOE异常){
e、 printStackTrace();
}
返回用户;
}
@凌驾
受保护的void onPostExecute(用户){
mAuthTask=null;
显示进度(假);
if(user.success){
createLoginSession(user.fullname、user.mail、user.photo、user.token);
Intent i=新的Intent(getApplicationContext(),MainActivity.class);
i、 添加标志(意图、标志、活动、清除、顶部);
i、 设置标志(意图、标志、活动、新任务);
getApplicationContext().startActivity(i);
完成();
}否则{
mPasswordView.setError(getString(R.string.error\u密码不正确));
mPasswordView.requestFocus();
}
}
@凌驾
受保护的void onCancelled(){
mAuthTask=null;
显示进度(假);
}
}

请发布您已经尝试过的代码。我更新了我的问题请发布您已经尝试过的代码。我更新了我的问题