Java Android NameValuePair发送值
我有PHP代码,它连接到MySql并将数据编码为JSON。稍后我会过滤它并获得特定的JSON对象。当我使用一个NameValuePair对象时,它工作得很好,但现在我想使用用户名和密码之类的变量。现在,我在logcat错误解析data.org.json.JSONException中收到此警报:org.json.JSONObject$1类型的值null无法转换为JSONArray 我应该如何更改可以正常工作的代码Java Android NameValuePair发送值,java,php,android,json,Java,Php,Android,Json,我有PHP代码,它连接到MySql并将数据编码为JSON。稍后我会过滤它并获得特定的JSON对象。当我使用一个NameValuePair对象时,它工作得很好,但现在我想使用用户名和密码之类的变量。现在,我在logcat错误解析data.org.json.JSONException中收到此警报:org.json.JSONObject$1类型的值null无法转换为JSONArray 我应该如何更改可以正常工作的代码 $q=mysql_query("SELECT username, firstname
$q=mysql_query("SELECT username, firstname, lastname, email, phone1, skype, city, description FROM mdl_user WHERE username LIKE '$username' AND password LIKE '$password'");
while($e=mysql_fetch_assoc($q))
$output[]=$e;
print(json_encode($output));
发送请求的代码:
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("usern",""+usr));
nameValuePairs.add(new BasicNameValuePair("passw",""+psw));
InputStream is = null;
String result = "";
//http post
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://ik.su.lt/~jbarzelis/Bdarbas/getUserInfo.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
如果这是您放在服务器端的全部代码,那么我想您需要首先使用下面的
$\u POST[]
方法将值输入$username
和$password
$username=$_POST["usern"];
$password=$_POST["passw"];
密码也一样
因为到目前为止,变量中没有值,所以您的
SELECT
语句返回null
值,该值以JSON
格式发送给客户端,这会导致null
值错误。根据您的评论“我在尝试使用用户名时使用过,效果很好。”
您以何种形式存储密码?纯文本(我希望不是)还是散列?如果是散列,在哪里执行散列?在php中,你不知道如果它是完整的代码,你会在java代码中这样做吗?如果不是,那就是你的答案
至于类似的,它当然起作用了。LIKE没有=严格,它会产生很大的开销。它应该只在非常简单的搜索语句(非常简单)中使用,当然不应该在授权中使用。现在我的帖子没有意义,所以我将删除它:),但你仍然应该在授权中使用“=”而不是“喜欢”。并尝试硬编码您的用户名和密码,以检查它是否打印您的输出。如果是这样的话,问题就消失了,那么你就无法将数据发送到php脚本,而不是接收数据。是的,我完全同意这里的@MichałK。问题是返回的是null值,所以sql语句或向服务器发送数据可能有问题,或者只是您的
usr
和psw
变量与数据库中的变量不匹配。我在尝试仅使用用户名时使用了LIKE,效果很好。
$username=$_POST["usern"];
$password=$_POST["passw"];