【问题标题】:Android NameValuePair send valuesAndroid NameValuePair 发送值
【发布时间】:2012-04-23 03:46:29
【问题描述】:

我有连接到 MySql 并将数据编码为 JSON 的 PHP 代码。稍后我会过滤它并获取特定的 JSON 对象。当我使用一个 NameValuePair 对象时它工作得很好,但现在我想使用用户名和密码等变量。现在我在 logcat 中收到此警报 Error parsing data .org.json.JSONException: Value null of type org.json.JSONObject$1 cannot be convert to JSONArray.

我应该如何更改可以正常工作的代码?

$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());
        }

已编辑

$username = mysql_real_escape_string($_REQUEST['usern']);
$password = mysql_real_escape_string($_REQUEST['passw']);
$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));

【问题讨论】:

    标签: java php android json


    【解决方案1】:

    如果这是您放在服务器端的全部代码,那么我想您需要首先使用 $_POST[] 这样的方法将值放入 $username$password

    $username=$_POST["usern"];
    $password=$_POST["passw"];
    

    password 也是如此。

    由于现在变量中没有值,您的 SELECT 语句返回 null 值,该值以 JSON 格式发送到客户端,这会产生 null 值错误。

    【讨论】:

    • 现在我的帖子没有意义,所以我会删除它:)
    • 但您仍然应该在授权中使用“=”而不是“LIKE”。并尝试硬编码您的用户名和密码以检查它是否打印您的输出。如果确实如此,并且问题消失了,那么您将数据发送到 php 脚本而不是接收它时遇到问题
    • 是的,我完全同意@MichałK 的观点。问题是返回的是空值,所以一定是sql语句或者向服务器发送数据有问题,
    • 或者只是您的 usrpsw 变量与数据库中的变量不匹配。
    • 我在尝试只使用用户名时使用了 LIKE 并且效果很好。
    【解决方案2】:

    根据您的评论“我在尝试只使用用户名时使用了 LIKE,它运行良好。”

    您以什么形式存储您的密码?纯文本(我希望不是)还是散列?如果散列,你在哪里执行散列?在php中,如果它是整个代码,你不会在你的java代码中这样做吗?如果没有,那就是你的答案。

    至于 LIKE - 当然,它确实有效。 LIKE 没有 = 严格,它会产生很大的开销。它应该只用于非常简单的搜索语句(VERY SIMPLE),当然不能用于授权。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多