我正在编写一个Android应用程序,用于检索属于特定用户的数据。我正在Activity2中使用Activity1的SharedPreference。
这是我在Activity1中存储的SharedPreference
SharedPreferences sp = getSharedPreferences("login details", 0);
SharedPreferences.Editor spedit = sp.edit();
spedit.putString("sPhone",sPhone);
spedit.putString("sPassword", sPassword);
spedit.commit();
我在Activity2中使用上面的SharedPreference并将其作为String发送到PHP文件: Activity2代码:
SharedPreferences prefs = getSharedPreferences("login details", 0);
String str = prefs.getString("sPhone", "");
nameValuePairs.add(new BasicNameValuePair("userid", str));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httppost.setHeader("Content-type", "application/json");
response = httpclient.execute(httppost);
entity = response.getEntity();
is = entity.getContent();
这是PHP代码:
<?php
mysql_connect("localhost","root","");
mysql_select_db("assigndroid");
header('content-type=application/json; charset=utf-8');
//$userID = isset($_POST['userid']) ? $_POST['userid'] : '';
$userID = mysql_real_escape_string($_POST['userid']);
$sql=mysql_query("select * from newassignment where issuedBy='$userID';");
while($row=mysql_fetch_assoc($sql))
$output[]=$row;
print(json_encode($output));
mysql_close();
?>
但SQL查询返回'null'。我收到错误提示“未定义的变量输出”。由于这个空值,应用程序通过说“FATAL EXCEPTION AsyncTask#1”在模拟器上崩溃。
答案 0 :(得分:1)
在尝试向其附加值之前,需要在PHP中声明数组:
// ...
$output = array(); // Add this line
while($row=mysql_fetch_assoc($sql))
$output[]=$row;
// ...
如果这样做,错误将消失,输出将不再是无效的JSON。
但请注意,您应该在生产中禁用display_errors
,因为错误可能会泄露有关您的应用程序的信息,从而可能会将攻击媒介暴露给恶意用户。
您还将请求内容类型设置为application/json
,但您传递的数据的实际类型为application/x-www-form-urlencoded
。 PHP不会解码您发送的数据,并且不会填充$_POST
。更改请求内容类型:
httppost.setHeader("Content-type", "application/x-www-form-urlencoded");
答案 1 :(得分:0)
DaveRandom首先说明了如何声明你的数组,但你也应该检查查询是否实际成功。是的,它可以在您手动运行时运行,但这并不能保证其他东西出错,比如从Android客户端获取奇怪的数据。
例如:
if( $sql = mysql_query("select * from newassignment where issuedBy='$userID';") ) {
while($row = mysql_fetch_assoc($sql)) {
$output[] = $row;
}
print(json_encode($output));
} else {
print(json_encode('query failed: ' . mysql_error()));
}
mysql_close();
此外,请停止使用mysql_*
个功能。 Blah blah不赞成使用SQL注入,你知道整个歌曲和舞蹈......