android string.equals()与条件不匹配

14ifxucb  于 2021-07-13  发布在  Java
关注(0)|答案(5)|浏览(347)

我一直在用安卓上的凌空,似乎我真的不能让这个特别的部分工作
这是我的json

  1. {
  2. "code": 1,
  3. "status": 200,
  4. "data": "bla... bla..."
  5. }

这是活动课

  1. try
  2. {
  3. JSONObject json_response = new JSONObject(response);
  4. String status = json_response.getString("status");
  5. if (status.equals("200"))
  6. {
  7. do something
  8. }
  9. else
  10. {
  11. Toast.makeText(getApplicationContext(), status, Toast.LENGTH_LONG).show();
  12. }
  13. }

它总是跳过该条件,因为它不匹配,toast打印值200作为状态返回值的证明,并且该值是200
我试过了

  1. int status = json_response.getInt("status");
  2. if (status == 200)

哪个返回“jsonexception:java.lang.string类型的值不能转换为jsonobject”,有什么见解吗?
编辑:
下面是完整的loginactivity.java

  1. package my.sanik.loginandregistration.activity;
  2. import android.app.Activity;
  3. import android.app.ProgressDialog;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.util.Log;
  7. import android.view.View;
  8. import android.widget.Button;
  9. import android.widget.EditText;
  10. import android.widget.Toast;
  11. import com.android.volley.Request.Method;
  12. import com.android.volley.Response;
  13. import com.android.volley.VolleyError;
  14. import com.android.volley.toolbox.StringRequest;
  15. import org.json.JSONException;
  16. import org.json.JSONObject;
  17. import java.util.HashMap;
  18. import java.util.Map;
  19. import my.sanik.loginandregistration.R;
  20. import my.sanik.loginandregistration.app.AppConfig;
  21. import my.sanik.loginandregistration.app.AppController;
  22. import my.sanik.loginandregistration.helper.SessionManager;
  23. public class LoginActivity extends Activity
  24. {
  25. private static final String TAG = RegisterActivity.class.getSimpleName();
  26. private Button btnLogin;
  27. private Button btnLinkToRegister;
  28. private EditText inputEmail;
  29. private EditText inputPassword;
  30. private ProgressDialog pDialog;
  31. private SessionManager session;
  32. @Override
  33. public void onCreate(Bundle savedInstanceState)
  34. {
  35. super.onCreate(savedInstanceState);
  36. setContentView(R.layout.activity_login);
  37. inputEmail = (EditText) findViewById(R.id.email);
  38. inputPassword = (EditText) findViewById(R.id.password);
  39. btnLogin = (Button) findViewById(R.id.btnLogin);
  40. btnLinkToRegister = (Button) findViewById(R.id.btnLinkToRegisterScreen);
  41. // Progress dialog
  42. pDialog = new ProgressDialog(this);
  43. pDialog.setCancelable(false);
  44. // Session manager
  45. session = new SessionManager(getApplicationContext());
  46. // Check if user is already logged in or not
  47. if (session.isLoggedIn())
  48. {
  49. // User is already logged in. Take him to main activity
  50. Intent intent = new Intent(LoginActivity.this, MainActivity.class);
  51. startActivity(intent);
  52. finish();
  53. }
  54. // Login button Click Event
  55. btnLogin.setOnClickListener(new View.OnClickListener()
  56. {
  57. public void onClick(View view)
  58. {
  59. String email = inputEmail.getText().toString().trim();
  60. String password = inputPassword.getText().toString().trim();
  61. // Check for empty data in the form
  62. if (!email.isEmpty() && !password.isEmpty())
  63. {
  64. // login user
  65. checkLogin(email, password);
  66. }
  67. else
  68. {
  69. // Prompt user to enter credentials
  70. Toast.makeText(getApplicationContext(), "Please enter the credentials!", Toast.LENGTH_LONG).show();
  71. }
  72. }
  73. });
  74. // Link to Register Screen
  75. btnLinkToRegister.setOnClickListener(new View.OnClickListener()
  76. {
  77. public void onClick(View view)
  78. {
  79. Intent i = new Intent(getApplicationContext(), RegisterActivity.class);
  80. startActivity(i);
  81. finish();
  82. }
  83. });
  84. }
  85. private void checkLogin(final String email, final String password)
  86. {
  87. // Tag used to cancel the request
  88. String tag_string_req = "req_login";
  89. pDialog.setMessage("Logging in ...");
  90. showDialog();
  91. StringRequest strReq = new StringRequest(Method.POST, AppConfig.URL_LOGIN, new Response.Listener<String>()
  92. {
  93. @Override
  94. public void onResponse(String response)
  95. {
  96. Log.d(TAG, "Login Response: " + response.toString());
  97. hideDialog();
  98. try
  99. {
  100. JSONObject json_response = new JSONObject(response);
  101. String status = json_response.getString("status");
  102. if (status.equals("200"))
  103. {
  104. session.setLogin(true);
  105. // Launch main activity
  106. Intent intent = new Intent(LoginActivity.this, MainActivity.class);
  107. startActivity(intent);
  108. finish();
  109. }
  110. else
  111. {
  112. // Error in login. Get the error message
  113. Toast.makeText(getApplicationContext(), "Wrong username or password", Toast.LENGTH_LONG).show();
  114. }
  115. }
  116. catch (JSONException e)
  117. {
  118. // JSON error
  119. e.printStackTrace();
  120. Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
  121. }
  122. }
  123. }, new Response.ErrorListener()
  124. {
  125. @Override
  126. public void onErrorResponse(VolleyError error)
  127. {
  128. Log.e(TAG, "Login Error: " + error.getMessage());
  129. Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
  130. hideDialog();
  131. }
  132. }) {
  133. @Override
  134. protected Map<String, String> getParams()
  135. {
  136. // Posting parameters to login url
  137. Map<String, String> params = new HashMap<>();
  138. params.put("email", email);
  139. params.put("password", password);
  140. return params;
  141. }
  142. };
  143. // Adding request to request queue
  144. AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
  145. }
  146. private void showDialog()
  147. {
  148. if (!pDialog.isShowing()) pDialog.show();
  149. }
  150. private void hideDialog()
  151. {
  152. if (pDialog.isShowing()) pDialog.dismiss();
  153. }
  154. }
cpjpxq1n

cpjpxq1n1#

先把你的照片打印出来 response 检查你的回答是什么,或者有没有什么额外的东西。

  1. try{
  2. Log.d(TAG, "Json response :" + response);
  3. } catch (JSONException e) {
  4. // TODO Auto-generated catch block
  5. e.printStackTrace();
  6. }

然后和你的价值观比较。

zynd9foi

zynd9foi2#

  1. {
  2. "code": 1,
  3. "status": 200, // Need this
  4. "data": "bla... bla..."
  5. }

你的 status 不是 String 所以,
叫这个

  1. int getStatus = Integer.parseInt(json_response.getString("status"));

然后

  1. if (getStatus==200)
  2. {
  3. // Your code
  4. }

注:

你可以用 getInt 直接代替 getString .

展开查看全部
u4dcyp6a

u4dcyp6a3#

使用此类获取json字符串servicehandler.java

  1. package com.example;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.net.HttpURLConnection;
  8. import java.net.URL;
  9. import android.util.Log;
  10. public class ServiceHandler {
  11. static String response = null;
  12. public final static int GET = 1;
  13. public ServiceHandler() {
  14. }
  15. public String makeServiceCall(String url, int method) {
  16. return this.makeMyServiceCall(url, method);
  17. }
  18. public String makeMyServiceCall(String myurl, int method) {
  19. InputStream inputStream = null;
  20. HttpURLConnection urlConnection = null;
  21. try {
  22. /* forming th java.net.URL object */
  23. URL url = new URL(myurl);
  24. urlConnection = (HttpURLConnection) url.openConnection();
  25. /* optional request header */
  26. urlConnection.setRequestProperty("Content-Type", "application/json");
  27. /* optional request header */
  28. urlConnection.setRequestProperty("Accept", "application/json");
  29. /* for Get request */
  30. urlConnection.setRequestMethod("GET");
  31. int statusCode = urlConnection.getResponseCode();
  32. /* 200 represents HTTP OK */
  33. if (statusCode == 200) {
  34. inputStream = new BufferedInputStream(urlConnection.getInputStream());
  35. response = convertInputStreamToString(inputStream);
  36. }
  37. } catch (Exception e) {
  38. Log.d("tag", e.getLocalizedMessage());
  39. }
  40. return response;
  41. }
  42. private String convertInputStreamToString(InputStream inputStream) throws IOException {
  43. BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
  44. String line = "";
  45. String result = "";
  46. while ((line = bufferedReader.readLine()) != null) {
  47. result += line;
  48. }
  49. /* Close Stream */
  50. if (null != inputStream) {
  51. inputStream.close();
  52. }
  53. return result;
  54. }
  55. }

在mainactivty.java中

  1. package com.example;
  2. import org.json.JSONException;
  3. import org.json.JSONObject;
  4. import android.app.Activity;
  5. import android.os.AsyncTask;
  6. import android.os.Bundle;
  7. import android.widget.Toast;
  8. public class MainActivity extends Activity {
  9. String jsonStr = "";
  10. JSONObject jo;
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. new GetDatas().execute();
  16. }
  17. class GetDatas extends AsyncTask<Void, Void, Void> {
  18. @Override
  19. protected Void doInBackground(Void... params) {
  20. ServiceHandler sh = new ServiceHandler();
  21. // put your url here...
  22. // Making a request to url and getting response
  23. jsonStr = sh.makeServiceCall("http://192.168.1.51/sumit/temp.txt",
  24. ServiceHandler.GET);
  25. return null;
  26. }
  27. @Override
  28. protected void onPostExecute(Void aVoid) {
  29. super.onPostExecute(aVoid);
  30. try {
  31. jo = new JSONObject(jsonStr);
  32. } catch (JSONException e) {
  33. // TODO Auto-generated catch block
  34. e.printStackTrace();
  35. }
  36. try {
  37. if (jo.getInt("status") == 200) {
  38. Toast.makeText(getApplicationContext(), "do something",
  39. Toast.LENGTH_LONG).show();
  40. } else {
  41. Toast.makeText(getApplicationContext(),
  42. "" + jo.getInt("status"), Toast.LENGTH_LONG).show();
  43. }
  44. } catch (JSONException e) {
  45. // TODO Auto-generated catch block
  46. e.printStackTrace();
  47. }
  48. }
  49. }
展开查看全部
kjthegm6

kjthegm64#

好的,如果问题是字符串或整数抛出异常(我无法在android studio 1.5.1中复制),我建议您这样做:

  1. try
  2. {
  3. JSONObject json_response = new JSONObject(response);
  4. Object status = json_response.getString("status");
  5. if (json_response.get("status") instanceof Integer)
  6. {
  7. // it's an integer
  8. }
  9. else if (json_response.get("status") instanceof String)
  10. {
  11. // it's a String
  12. } else {
  13. // let's try to find which class is it
  14. Log.e("MYTAG", "status is an instance of "+json_parse.get("status").getClass().getName());
  15. }
  16. } catch (Exception e) {
  17. Log.e("MYTAG", "Error parsing status => "+e.getMessage());
  18. }

您也可以先尝试这样做:

  1. JSONObject json_response = new JSONObject(response);
  2. String status = json_response.getString("status");
  3. int statint = Integer.parseInt(status);

希望对你有帮助。

展开查看全部
ippsafx7

ippsafx75#

试试这个

  1. if(status.equalsIgnoreCase("200"))

相关问题