サーバーから取得したデータの解析中にエラーが発生しました。いくつかの値を外部データベース(MySQL)に送信して、外部データベースを更新しようとしています。データベースが更新されたら、更新された値を取得して、内部 SQLite データベースで更新を実行しようとしています。
この問題に関連するコードを投稿しています。また、JSON を取得しようとしている profile.java クラスでエラーが発生している場所をマークしました。
ユーザーを登録した後にデータを取得すると、データの解析に関連するエラーは発生しません。更新はこれだけです。
また、外部データベースが更新されていません。
はい、この質問を投稿する前に十分な調査を行いました。同じ問題を抱えている人やトピックは見つかりませんでした。それが、この質問を投稿している理由です。
更新:問題は、index.phpの値ではなく変数にタグを設定していたことです。tag='profile' の代わりに tag="$profile" を実行していました。現在、1 つの列を正常に更新しました。すべての列を正常に更新したら、この投稿を再度更新します。貴重なご意見をありがとうございます。
以下はprofile.javaのコードです
public void onClick(View v) {
switch (v.getId()) {
case R.id.b_profileSave:
String email = email_et.getText().toString();
String name = username_tt.getText().toString();
String fullname = fullname_et.getText().toString();
String dob = dob_et.getText().toString();
String phone = phone_et.getText().toString();
String address = address_et.getText().toString();
String city = city_et.getText().toString();
String state = state_et.getText().toString();
String country = country_et.getText().toString();
String zipcode = zipcode_et.getText().toString();
UserFunctions userFunction = new UserFunctions();
//IM GETTING ERROR AT THIS POINT
JSONObject json = userFunction.updateProfile(email, fullname, dob,
phone, address, city, state, country, zipcode);
System.out.println(json);
....}
以下は、データの送信とサーバーからの JSON の取得を担当する profile メソッドを持つ UserFunction クラスのコードです。
public JSONObject updateProfile(String email, String fullname, String dob,
String phone, String address, String city, String state,
String country, String zipcode) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", profile_tag));
params.add(new BasicNameValuePair("email", email));
params.add(new BasicNameValuePair("full_name", fullname));
params.add(new BasicNameValuePair("birth_date", dob));
params.add(new BasicNameValuePair("phone", phone));
params.add(new BasicNameValuePair("address", address));
params.add(new BasicNameValuePair("city", city));
params.add(new BasicNameValuePair("state", state));
params.add(new BasicNameValuePair("country", country));
params.add(new BasicNameValuePair("zip", zipcode));
JSONObject json = jsonParser.getJSONFromUrl(profileURL, params);
System.out.println(params);
Log.e("JSON", json.toString());
return json;
}
以下は、データの解析を担当する JSONParse.java クラスのコードです。
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {
// Making HTTP request
try {
// 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();
} 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);
}
is.close();
json = sb.toString();
Log.e("JSON", json);
} 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;
}
}
以下は私のindex.phpのコードで、データをPOSTおよびGETします
else if ($tag == '$profile'){
$email = $_POST['email'];
$fullname = $_POST['full_name'];
$dob = $_POST['birth_date'];
$phone = $_POST['phone'];
$address = $_POST['address'];
$city = $_POST['city'];
$state = $_POST['state'];
$country = $_POST['country'];
$zipcode = $_POST['zip'];
$user = $db->profile($name, $fullname, $dob, $phone, $address, $city, $state, $country, $zipcode);
if($user){
$response["success"] = 1;
$response["uid"] = $user["unique_id"];
$response["user"]["name"] = $user["name"];
$response["user"]["email"] = $user["email"];
$response["user"]["created_at"] = $user["created_at"];
$response["user"]["updated_at"] = $user["updated_at"];
$response["user"]["full_name"] = $user["full_name"];
$response["user"]["birth_date"] = $user["birth_date"];
$response["user"]["phone"] = $user["phone"];
$response["user"]["address"] = $user["address"];
$response["user"]["city"] = $user["city"];
$response["user"]["state"] = $user["state"];
$response["user"]["country"] = $user["country"];
$response["user"]["zip"] = $user["zip"];
echo json_encode($response);
}else{
$response["error"] =1;
$response["error_msg"] = "Error updating profile";
echo json_encode($response);
}
} else {
echo "Invalid Request";
}
以下は、データベースに対してクエリを実行する DB_Functions.php のコードです。
public function profile($email, $fullname, $dob, $phone, $address, $city, $state, $country, $zipcode){
$result = mysql_query("UPDATE users SET updated_at = NOW(), full_name = '$fullname', birth_date = '$dob', phone = '$phone', address = '$address', city = '$city', state = '$state', country = '$country', zip = '$zipcode' WHERE email = '$email'") or die(mysql_error());
if($result){
$r = mysql_query("SELECT * FROM users WHERE email = '$email'");
return mysql_fetch_array($r);
}else{
return false;}
}
私のlogcat出力:
05-23 03:01:03.938: E/JSON(393): Invalid Request
05-23 03:01:03.938: E/JSON Parser(393): Error parsing data org.json.JSONException: Value Invalid of type java.lang.String cannot be converted to JSONObject
E/JSON(393):
{
"uid": "4fb32016d06af1.89812745",
"error": 0,
"user": {
"zip": null,
"phone": null,
"updated_at": null,
"birth_date": null,
"address": null,
"email": "vvp@gmail.com",
"name": "viking",
"state": null,
"created_at": "2012-05-15 20:33:42",
"country": null,
"city": null,
"full_name": null
},
"success": 1,
"tag": "login"
}