- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个应用程序,需要在数据库中存储联系人,因此我使用 wammp 和 PHPMyAdmin 来编写一个简单的 REST API。我已经编写了涉及注册和登录的部分,但由于某种原因,我无法使联系人存储正常工作,尽管我认为这几乎是逐字相同的事情。我收到异常:
org.json.JSONException: End of input at character 0 of
我已经四处寻找这个问题,看起来我传递回我的应用程序的 JSON 是空的,所以我知道这个问题,但在我查看的所有地方,解决方案都没有帮助我实际上解决了这个问题,所以我觉得这可能是一个独特的问题。这是我的相关Android代码:
// Create the new string request
StringRequest stringRequest = new StringRequest(Request.Method.POST, AppConfig.URL_NEW_CONTACT, new Response.Listener<String>()
{
@Override
public void onResponse(String response)
{
// Log method entry
MethodLogger methodLogger = new MethodLogger();
// Log the JSON that was returned
methodLogger.d("New Contact Response: " + response.toString());
// Remove the processing view
hideDialog();
// Try to retrieve JSON and parse through it
try
{
JSONObject jObj = new JSONObject(response);
// Check for errors in the JSON passed back
boolean error = jObj.getBoolean("error");
/*----------------------------------------------------------------*
* If there was no error found *
*----------------------------------------------------------------*/
if (!error)
{
// Indicate the success to the user
Toast.makeText(getApplicationContext(), "Contact successfully created.", Toast.LENGTH_LONG).show();
// Take the user back to the contact page
routeToContactPage();
}
/*----------------------------------------------------------------*
* Else if there was an error found *
*----------------------------------------------------------------*/
else
{
// Notify the user
String errorMsg = jObj.getString("message");
Toast.makeText(getApplicationContext(),
errorMsg, Toast.LENGTH_LONG).show();
}
}
/*--------------------------------------------------------------------*
* Catch any error in retrieving parsing etc JSON *
*--------------------------------------------------------------------*/
catch (JSONException e)
{
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Error storing contact: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
// Log method exit
methodLogger.end();
}
}, new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
// Log method entry
MethodLogger methodLogger = new MethodLogger();
// Notify the user
methodLogger.e("Error storing contact: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_LONG).show();
hideDialog();
// Log method exit
methodLogger.end();
}
})
{
@Override
protected Map<String, String> getParams()
{
// Log method entry
MethodLogger methodLogger = new MethodLogger();
// create a new params object and add the contact data
Map<String, String> params = new HashMap<String, String>();
// Add the params to the volley request
params.put("user_id", SessionManager.getUser().getId());
params.put("name", name);
params.put("email", emailAddress);
// Log method exit
methodLogger.end();
// Return the user data
return params;
}
};
// Send the request string to the request queue to be sent to the PHP API
AppController.getInstance().addToRequestQueue(stringRequest, tag_string_req);
}
相关PHP代码:
存储联系人:
public function storeContact($name, $email, $user_id)
{
$uuid = uniqid('', true);
$result = mysqli_query($this->conn, "INSERT INTO contacts (unique_id, name, email, created_at, updated_at, user_id) VALUES ('$uuid', '$name', '$email', NOW(), NULL, '$user_id')") or die (mysql_error());
if ($result)
{
$contact = mysqli_query($this->conn, "SELECT * FROM contacts WHERE name = '$name' AND user_id = '$user_id'");
return $contact;
}
else
{
return false;
}
}
与服务器/应用程序通信:
<?php
require_once 'include/DB_Functions.php';
$db = new DB_Functions();
$response = array();
if (isset($_POST['user_id']) && isset($_POST['name']) && isset($_POST['email']))
{
$user_id = $_POST['user_id'];
$name = $_POST['name'];
$email = $_POST['email'];
$result = $db->storeContact($name, $email, $user_id);
if ($result)
{
$response["error"] = FALSE;
$response["message"] = "Contact stored successfully";
}
else
{
$response["error"] = TRUE;
$response["message"] = "Unknown error occurred in storing contact";
}
}
else
{
$response["error"] = TRUE;
$response["message"] = "Required parameters, name, email, or user_id, missing";
}
echo json_encode($response);
?>
最后,相关的 logcat 输出:
07-30 22:39:07.408 24212-24212/com.example.e4977.spotme D/com.example.e4977.spotme.AppController: Method Entry: getInstance()
getInstance() finished in 0.000 seconds.
Method Entry: addToRequestQueue()
07-30 22:39:07.409 24212-24212/com.example.e4977.spotme D/com.example.e4977.spotme.AppController: Method Entry: getRequestQueue()
getRequestQueue() finished in 0.000 seconds.
07-30 22:39:07.410 24212-24212/com.example.e4977.spotme D/com.example.e4977.spotme.AppController: addToRequestQueue() finished in 0.001 seconds.
07-30 22:39:07.410 24212-24212/com.example.e4977.spotme D/com.example.e4977.spotme.ContactActivity: onCreate() finished in 0.072 seconds.
07-30 22:39:07.424 24212-31569/com.example.e4977.spotme D/com.example.e4977.spotme.ContactActivity$3: Method Entry: getParams()
07-30 22:39:07.425 24212-31569/com.example.e4977.spotme D/com.example.e4977.spotme.ContactActivity$3: getParams() finished in 0.000 seconds.
07-30 22:39:07.426 24212-24212/com.example.e4977.spotme D/com.example.e4977.spotme.NewContactActivity$1$1: Method Entry: onResponse()
onResponse() New Contact Response:
07-30 22:39:07.426 24212-24212/com.example.e4977.spotme D/com.example.e4977.spotme.NewContactActivity: Method Entry: hideDialog()
07-30 22:39:07.448 24212-24212/com.example.e4977.spotme D/com.example.e4977.spotme.NewContactActivity: hideDialog() finished in 0.021 seconds.
07-30 22:39:07.448 24212-24212/com.example.e4977.spotme W/System.err: org.json.JSONException: End of input at character 0 of
at org.json.JSONTokener.syntaxError(JSONTokener.java:449)
at org.json.JSONTokener.nextValue(JSONTokener.java:97)
at org.json.JSONObject.<init>(JSONObject.java:159)
at org.json.JSONObject.<init>(JSONObject.java:176)
at com.example.e4977.spotme.NewContactActivity$1$1.onResponse(NewContactActivity.java:119)
07-30 22:39:07.449 24212-24212/com.example.e4977.spotme W/System.err: at com.example.e4977.spotme.NewContactActivity$1$1.onResponse(NewContactActivity.java:99)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6798)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
07-30 22:39:07.454 24212-24212/com.example.e4977.spotme D/com.example.e4977.spotme.NewContactActivity$1$1: onResponse() finished in 0.027 seconds.
值得注意的是,我看到响应是空的,但我不知道为什么。这是数据库架构,以防这也是问题的一部分。
最佳答案
我相当确定出现这种情况的原因是您正在使用 mysqli_*
函数集,但随后尝试使用 mysql_error
获取最新的错误文本,这将返回一个空字符串,因为调用 mysql_*
函数没有错误。
尝试替换:
$result = mysqli_query($this->conn, /* the rest */) or die (mysql_error());
与:
$result = mysqli_query($this->conn, /* the rest */) or die (mysqli_error($this->conn));
您仍然会抛出异常,类似于:
org.json.JSONException: Value Data of type java.lang.String cannot be converted to JSONObject
因为响应不是有效的 JSON,但这应该会帮助您。
因为这是一个非常经典的问题,所以我无法避免在您发布的代码中评论 SQL 注入(inject)问题。值得一读https://cwe.mitre.org/data/definitions/89.html了解这个问题,然后看一下 http://php.net/manual/en/mysqli.quickstart.prepared-statements.php了解如何使用 mysqli_prepare
、mysqli_stmt_bind_param
和 mysqli_stmt_execute
组合出更安全的实现。
关于php - Android JSON 与 Volley 和 PHP 输入结束于字符 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51605210/
我目前正在测试 Volley 库。但是当请求失败 (404) 时,它不会再次执行,或者至少没有错误。但是缺少数据。如果请求失败,这是重试请求的正确方法吗? 提前致谢 req.setRetryPolic
我是新来从事Volley和缓存工作的:P。尽管我已经看过许多与Volley进行图像缓存有关的文章和帖子,但是我仍然不清楚采用Volley进行图像缓存的最佳/首选方式。像磁盘缓存还是内存? Volley
我想使用 Volley 从我的 Android 应用发送请求。 我已经把它包含在 build.gradle 中了 dependencies { ... compile 'com.andr
我的目标是从另一个类调用 Volley,这是一种非常简洁、模块化的方式,即: VolleyListener newListener = new VolleyListener()
我的代码是: class MyService extends Service{ public void onCreate(){ new ImageLoader(mReque
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我需要帮助来解决 Volley 库错误。我已使用 nodejs api 向服务器发送一些凭据以进行用户注册。在成功的情况下,当我的所有凭据对于创建新用户帐户都是唯一的时,它会向我显示所有响应等的所有内
我正在尝试完善我的应用程序中的错误处理,但我找不到 Volley 触发某些错误的集中位置以及原因。例如,我想知道如果我的请求的状态代码是 500 或更大,它肯定会触发 ServerError,但我似乎
当我在调试器中运行该方法时,数据按预期显示,但是每当我尝试使用它执行任何操作时,parentObject 的值都会返回为 null。 我只是想从服务器获取响应并将其存储为 JSONObject 以便在
我正在使用 Android Volley 缓存请求,这在我使用 GET 时工作正常,但由于某些原因我改用 POST。现在我想用不同的 POST 数据缓存相同的 URL。 请求 1 -> URL1,PO
我的情况是使用 Android-volley至 POST我的 json 对象,我可以成功发布所有内容,我的数据在服务器中可见,但服务器响应为 String不像 json ,这就是出现错误的原因。 co
我正在使用 volley 从 REST api 解析电影详细信息,并将解析的数据保存在名为 detailsMovies 的对象数组列表中。但是我无法在 onResponse 方法之外访问 ArrayL
我想知道如何解决这个问题。已完成代码的研究和替换,但问题仍然存在。 这是我使用 volley 的代码。 private void Regist(){ loading.setVisibility
如何创建一个单独的类,在其中定义所有关于 volley在另一个 Activity 中,我们直接传递 URL、CONTEXT 和 Get Response... 最佳答案 首先在Activity中创建回
我正在使用 volley 库并以 XML 格式获取响应。我想知道我们如何使用/volley 库解析响应。谢谢。 最佳答案 StringRequest req = new StringReque
当我在android studio中搜索 Volley 时,同时获取com.mcxiaoke.volley:library:1.0.19和com.mcxiaoke.volley:library-aar
我是 volley 和 android 的新手,我已经用 gradle 安装了 volley 并做了与官方教程相同的操作。但是没有响应,这意味着 Errorlistener 和 Responselis
当我在 Volley 中发出请求时,我收到 com.android.volley.ServerError 和响应代码 400。 我正在做这样的事情(通用示例代码): final String para
我引用了http://www.androidhive.info/2016/02/android-push-notifications-using-gcm-php-mysql-realtime-chat
当我将以下行添加到依赖项的 build.gradle 行时,Android Studio 显示此错误消息:compile 'com.android.volley:volley:1.0.0' apply
我是一名优秀的程序员,十分优秀!