我知道这个问题已被问过100次,但我无法解决以下问题
我有一个用于登录的Web服务,它使用看起来像这样的JSON格式字符串进行响应
{ "success": 0, "error_message": "Username and/or password is invalid." }我知道
是一个JSON对象
我试图像这样检索对象
protected Boolean doInBackground(Void... params) {
String TAG_PATH = "success";
ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();
String AuthResult2 = "";
//this is where you should write your authentication code
// or call external service
// following try-catch just simulates network access
try{
JSONParser jParser = new JSONParser();
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("username", emailTextView.getText().toString()));
nameValuePairs.add(new BasicNameValuePair("password", passwordTextView.getText().toString()));
jParser.nameValuePairs = nameValuePairs;
// Getting JSON from URL
String url = "login.php";
// JSONArray json = jParser.getJSONFromUrl(url);
JSONObject json = jParser.getJSONFromUrl(url);
for(int i = 0; i < json.length(); i++) {
JSONObject c = json.getJSONObject(i);
// Storing JSON item in a Variable
AuthResult2 = c.getString(TAG_PATH);
}
} catch (JSONException e) {
e.printStackTrace();
}
if (AuthResult2.equals("true")) {
return true;
}else{
return false;
}
}
你可以看到我改变了行
JSONArray json = jParser.getJSONFromUrl(url);
到
JSONObject json = jParser.getJSONFromUrl(url);
我知道我还必须删除for ...循环但是我在Android Studio中收到错误。
它说
必需的JSONObject找到JSONArray。
据我所知,我的代码很合理。
请帮助我继续我的生活
UPDATE 错误的副本
C:\Users\Alex\AndroidStudioProjects\CameraScan4\app\src\main\java\com\example\alex\camerascan4\LoginActivity.java
Error:(295, 53) error: incompatible types
required: JSONObject
found: JSONArray
Error:(300, 34) error: method getJSONObject in class JSONObject cannot be applied to given types;
required: String
found: int
reason: actual argument int cannot be converted to String by method invocation conversion
更新
这是我的JSONParser,我完全忘记它依赖于此,并假设它是一个内置的东西。我觉得多么愚蠢。我看到了类型未命中匹配的原因,但是我现在可以找到一种方法来使用1个解析器类来返回数组或对象,具体取决于响应,甚至不确定是否可能。然后我考虑复制类,1用于数组响应,另一个用于对象。但必须有更好的方法
我想我可以把对象(如果那是它收到的东西)变成一个数组然后像往常一样传回来???