[英]Error JSON Parser android app
I have a small problem with my code and I can't find why. 我的代码有一个小问题,我找不到原因。 I get the error parsing data for my email value.
我收到我的电子邮件值的数据解析错误。 The exact error is :
确切的错误是:
Error parsing data org.json.JSONException: Value Mail of type java.lang.String cannot be converted to JSONObject.
It happens after having the Log.d(request!, starting) 发生Log.d(request !,开始)之后发生
Here are the code. 这是代码。
Activity.java: Activity.java:
package com.example.mysqltest;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class ForgotPassword extends Activity implements OnClickListener{
private EditText email;
private Button mForgotPassword;
// Progress Dialog
private ProgressDialog pDialog;
// JSON parser class
JSONParser jsonParser = new JSONParser();
//php register script
private static final String REGISTER_URL = "test";
//ids
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_forgot_password);
email = (EditText)findViewById(R.id.emailforf);
mForgotPassword = (Button)findViewById(R.id.forgotPassword);
mForgotPassword.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new ForgotPass().execute();
}
class ForgotPass extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(ForgotPassword.this);
pDialog.setMessage("Retrieving password...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected String doInBackground(String... args) {
// TODO Auto-generated method stub
// Check for success tag
int success;
String emails = email.getText().toString();
if (emails instanceof String){
Log.d("lol","ok");
}else{
Log.d("lol","not ok");
}
try {
// Building Parameters
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ForgotPassword.this);
String userpref = prefs.getString("username","arnaud");
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("emailForgot", emails));
Log.d(userpref,"lol");
params.add(new BasicNameValuePair("username", userpref));
Log.d("request!", "starting");
//Posting user data to script
JSONObject json = jsonParser.makeHttpRequest(
REGISTER_URL, "POST", params);
// full json response
Log.d("Registering attempt", json.toString());
// json success element
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("User Created!", json.toString());
finish();
return json.getString(TAG_MESSAGE);
}else{
Log.d("Registering Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
// dismiss the dialog once product deleted
pDialog.dismiss();
if (file_url != null){
Toast.makeText(ForgotPassword.this, file_url, Toast.LENGTH_LONG).show();
}
}
}
}
JSONParser.java : JSONParser.java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(final String url) {
// Making HTTP request
try {
// Construct the client and the HTTP request.
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
// Execute the POST request and store the response locally.
HttpResponse httpResponse = httpClient.execute(httpPost);
// Extract data from the response.
HttpEntity httpEntity = httpResponse.getEntity();
// Open an inputStream with the data content.
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
// Create a BufferedReader to parse through the inputStream.
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
// Declare a string builder to help with the parsing.
StringBuilder sb = new StringBuilder();
// Declare a string to store the JSON object data in string form.
String line = null;
// Build the string until null.
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
// Close the input stream.
is.close();
// Convert the string builder data to an actual string.
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// Try to parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// Return the JSON Object.
return jObj;
}
// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
// check for request method
if(method == "POST"){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}else if(method == "GET"){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
Thanks for any help. 谢谢你的帮助。
[Edit] Here is my web service : [编辑]这是我的网络服务:
<?php
try {
$to = $_POST['emailForgot'];
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "track_my_mate@example.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
$randome = 'pierre';
$query = "UPDATE 'users' SET 'password' = ? WHERE 'id' = ? ";
//Again, we need to update our tokens with the actual data:
$query_params = array(
':pass' => $randome,
':user' => $_POST['username']
);
//time to run our query, and create the user
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
// For testing, you could use a die and message.
//die("Failed to run query: " . $ex->getMessage());
//or just use this use this one:
$response["success"] = 0;
$response["message"] = "Database Error2. Please Try Again!";
die(json_encode($response));
}
} catch (Exception $e) {
$response["success"] = 0;
$response["message"] = "Please Try Again!";
}
//If we have made it this far without dying, we have successfully added
//a new user to our database. We could do a few things here, such as
//redirect to the login page. Instead we are going to echo out some
//json data that will be read by the Android application, which will login
//the user (or redirect to a different activity, I'm not sure yet..)
$response["success"] = 1;
$response["message"] = "Password Successfully Changed!";
try {
echo json_encode($response);
} catch (Exception $e) {
echo ("pierre");
}
//for a php webservice you could do a simple redirect and die.
//header("Location: login.php");
//die("Redirecting to login.php");
//}
?>
[EDIT2] I get : Mail Sent. [EDIT2]我得到:邮件已发送。 {"success":0,"message":"Database Error2. Please Try Again !"} The problem is in my query I guess?
{“成功”:0,“消息”:“数据库错误2。请重试!”}问题出在我的查询中吗? Arnaud
阿诺
get JSONException: Value of type java.lang.String cannot be converted to JSONObject when parsing a JSON response get JSONException:解析JSON响应时无法将类型java.lang.String的值转换为JSONObject
Likely that your web service is not returning correct JSON. 您的网络服务可能未返回正确的JSON。
i wanted to put some comment but i should have at list 50 reputation!!! 我想发表一些评论,但我应该有50个声誉!!! so i should give my answer here... i had same problem with json object.
所以我应该在这里给出答案... json对象也有同样的问题。 use "GET" method instead of "POST".
使用“ GET”方法而不是“ POST”。 try it...
试试吧...
USE THIS JSON PARSER 使用此JSON PARSER
public class JSONParser extends Activity{
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
// check for request method
if(method == "POST"){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}else if(method == "GET"){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
Log.e("JSON PARSER", "GET OR POST");
Toast.makeText(getApplicationContext(), "Something is wrong with network!", Toast.LENGTH_LONG).show();
json="";
create_JSon_Object();
} catch (ClientProtocolException e) {
Toast.makeText(getApplicationContext(), "Something is wrong with network!", Toast.LENGTH_LONG).show();
Log.e("JSON PARSER", "GET OR POST");
json="";
return create_JSon_Object();
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "Something is wrong with network!", Toast.LENGTH_LONG).show();
Log.e("JSON PARSER IO ERROR", "GET OR POST");
json="";
return create_JSon_Object();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Something is wrong with network!", Toast.LENGTH_LONG).show();
Log.e("JSON PARSER Buffer Error", "Error converting result ");
json="";
return create_JSon_Object();
}
return create_JSon_Object();
}
private JSONObject create_JSon_Object() {
// try parse the string to a JSON object
try {
//jObj = new JSONObject(json);
jObj = new JSONObject(json);
} catch (JSONException e) {
Toast.makeText(getApplicationContext(), "Something is wrong with network!", Toast.LENGTH_LONG).show();
Log.e("JSON Parser", "Error parsing data " + e.toString());
return jObj;
}
// return JSON String
return jObj;
}
}
From server side, you need to send 从服务器端,您需要发送
{"success":0,"message":"Database Error2. Please Try Again !"}
instead of 代替
Mail Sent. {"success":0,"message":"Database Error2. Please Try Again !"}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.