java - 字符串无法转换为布尔错误
问题描述
刚尝试运行,我收到此错误:
org.json.JSONException:java.lang.String 类型成功时的值无法转换为布尔值
在 org.json.JSON.typeMismatch(JSON.java:100)
在 org.json.JSONObject.getBoolean(JSONObject.java:378)
我是 Java 的初学者,我似乎无法弄清楚为什么字符串不会转换为布尔值。
错误代码专门出现在“if”行和“else if”行。
编码:
public class RegisterActivity extends AppCompatActivity {
private ArrayAdapter adapter;
private Spinner spinner;
private String userID;
private String userPassword;
private String userGender;
private String userMajor;
private String userEmail;
private AlertDialog dialog;
private boolean validate = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
spinner = (Spinner) findViewById(R.id.majorSpinner);
adapter = ArrayAdapter.createFromResource(this, R.array.major, android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
final EditText idText = (EditText) findViewById(R.id.idText);
final EditText passwordText = (EditText) findViewById(R.id.passwordText);
final EditText emailText = (EditText) findViewById(R.id.emailText);
RadioGroup genderGroup = (RadioGroup) findViewById(R.id.genderGroup);
int genderGroupID = genderGroup.getCheckedRadioButtonId();
userGender = ((RadioButton) findViewById(genderGroupID)).getText().toString();
genderGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
RadioButton genderButton = (RadioButton) findViewById(i);
userGender = genderButton.getText().toString();
}
});
final Button validateButton = (Button) findViewById(R.id.validateButton);
validateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String userID = idText.getText().toString();
if(validate)
{
return;
}
if(userID.equals(""))
{
AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
dialog = builder.setMessage("아이디는 빈 칸일 수 없습니다.")
.setPositiveButton("확인", null)
.create();
dialog.show();
return;
}
Response.Listener<String> responseListener = new Response.Listener<String>(){
@Override
public void onResponse(String response){
try
{
JSONObject jsonResponse = new JSONObject(response);
boolean success = jsonResponse.getBoolean("success");
if(success)
{
AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
dialog = builder.setMessage("사용할 수 있는 아이디 입니다.")
.setPositiveButton("확인", null)
.create();
dialog.show();
idText.setEnabled(false);
validate = true;
idText.setBackgroundColor(getResources(). getColor(R.color.colorGray));
validateButton.setBackgroundColor(getResources(). getColor(R.color.colorGray));
}
else{
AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
dialog = builder.setMessage("사용할 수 없는 아이디 입니다.")
.setNegativeButton("확인", null)
.create();
dialog.show();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
};
ValidateRequest validateRequest = new ValidateRequest(userID, responseListener);
RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
queue.add(validateRequest);
}
});
Button registerButton = (Button) findViewById(R.id.registerButton);
registerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String userID = idText.getText().toString();
String userPassword = passwordText.getText().toString();
String userMajor = spinner.getSelectedItem().toString();
String userEmail = emailText.getText().toString();
if(!validate){
AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
dialog = builder.setMessage("먼저 중복 체크를 해주세요.")
.setNegativeButton("확인", null)
.create();
dialog.show();
return;
}
if(userID.equals("") || userPassword.equals("") || userMajor.equals("") || userEmail.equals("") || userGender.equals("")){
AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
dialog = builder.setMessage("빈 칸 없이 입력해주세요.")
.setNegativeButton("확인", null)
.create();
dialog.show();
return;
}
Response.Listener<String> responseListener = new Response.Listener<String>(){ #########Error here
@Override
public void onResponse(String response){ #########Error here
try
{
JSONObject jsonResponse = new JSONObject(response);
boolean success = jsonResponse.getBoolean("success");
if(success)
{
AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
dialog = builder.setMessage("회원 등록이 성공했습니다.")
.setPositiveButton("확인", null)
.create();
dialog.show();
finish();
}
else {
AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
dialog = builder.setMessage("회원 등록에 실패했습니다.")
.setNegativeButton("확인", null)
.create();
dialog.show();
}
}
catch (JSONException e)
{
e.printStackTrace();
// Toast.makeText(getApplicationContext(), "error",
// Toast.LENGTH_SHORT).show();
}
}
};
RegisterRequest registerRequest = new RegisterRequest(userID, userPassword, userGender, userMajor, userEmail, responseListener);
RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
queue.add(registerRequest);
}
});
}
@Override
protected void onStop(){
super.onStop();
if(dialog !=null)
{
dialog.dismiss();
dialog = null;
}
}
}
解决方案
错误信息说明了一切。
org.json.JSONException:java.lang.String类型成功时的值
键 (success) 的值是ture,它不是布尔值,而是应该像true。所以json在将其转换为布尔值时面临问题。
这个问题在webservice方面,你在webservice中错误地返回了ture(不是真的),所以请在那里进行更改。
推荐阅读
- swift - 编写一个接受任何由 CustomStringConvertible 表示的 RawRepresentable 值的通用函数时出现问题
- node.js - 用字符串键和函数值定义对象的类型
- python - 我在 Python 中不断收到 NameError,说事情没有定义,尽管我确实定义了它们
- c - 需要用什么算法来解决这个问题的帮助
- react-native - 如何在 React Native 中检测慢速互联网连接
- swift - Swift NSPredicate SUBQUERY with NOT IN?
- angularfire - 给出 fire-base --version 时出现错误。错误 - firebase' 无法识别
- r - e1071 svm() 函数的最大迭代次数是多少?
- wso2 - WSO2-IS:用户存储在任何更改后删除
- javascript - 尝试在 nuxt 中使用库时获取意外令牌 {