我有一个php文件。当我在像http://localhost/UserDetails.php
这样的Localhost中运行它时,它按预期工作,没有错误,从volleyLogin.php
获取详细信息并返回类别。
<?php
require_once('volleyLogin.php');
//Select from the cat_name column in the category table, check it against the User table and return values where things in the user_id
//column, in category table are equal to user_id in the user table, and where username in the usertable = "logged in user"
$resultSet = $con->query("SELECT category.cat_name FROM category INNER JOIN user ON category.user_id =
user.user_id WHERE user.username = '$username' ")
or die($con->error);
//$username = "ali" ;
if ($resultSet->num_rows > 0) {
while($rows = $resultSet->fetch_assoc()) {
$catname = $rows['cat_name'];
// output data of each row
//$catname = catname;
echo "<p> Name: $catname </p>";
}}
else {
echo "0 results";
}
echo "userdetails.php works";
$con->close();
?>
当我将相同的文件上传到我的服务器并使用Volley在我的应用程序上调用它时(下面的代码),我一直在&#39;失败&#39;在我的应用程序中你知道我做错了什么吗?奇怪的是它在localhost上的工作方式,而不是在服务器上,相同的代码。如果我在UserDetails.php
和<?php
之间删除了?>
中的代码,那么我的回复是“是”&#39;。任何指针都会有所帮助,谢谢。
public class ActivityUserProfile extends AppCompatActivity {
private TextView textView1;
private TextView textView2;
public static final String LOGIN_URL = "http://12.345.67.89/UserDetails.php";
public static final String KEY_USERNAME="username";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_profile);
textView1 = (TextView) findViewById(R.id.textViewUsername);
textView2 = (TextView) findViewById(textTitles);
// Instantiate the RequestQueue.
RequestQueue requestQueue = Volley.newRequestQueue(this);
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, LOGIN_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//do stuff here
textView2.setText("Yes");
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//do stuff here
textView2.setText("Failed");
}
}){
};
// Add the request to the RequestQueue.
requestQueue.add(stringRequest);
}
}
答案 0 :(得分:1)
public class ActivityUserProfile extends AppCompatActivity {
private TextView textView1;
private TextView textView2;
public static final String LOGIN_URL = "http://12.345.67.89/UserDetails.php";
public static final String KEY_USERNAME="username";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_profile);
textView1 = (TextView) findViewById(R.id.textViewUsername);
textView2 = (TextView) findViewById(textTitles);
// Instantiate the RequestQueue.
RequestQueue requestQueue = Volley.newRequestQueue(this);
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, LOGIN_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//do stuff here
Toast.maketext(getApplicationContext(),response.toString(),Toast.LENGTH_LONG).show();
textView2.setText("Yes");
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//do stuff here
Toast.maketext(getApplicationContext(),error.toString(),Toast.LENGTH_LONG).show();
textView2.setText("Failed");
}
}){
};
// Add the request to the RequestQueue.
requestQueue.add(stringRequest);
}
}
试试这个。并发布你的logcat。
答案 1 :(得分:1)
这个问题帮助了我: PHP 500 Internal Server Error when calling Volley
我深入挖掘了Apache服务器上的日志文件。事实上,我的一个变量并没有在我遇到问题的php文件中定义。
在我的Apache错误日志中,我得到了:
PHP Notice: Undefined variable: con in /var/www/html/UserDetails.php on line 8
PHP Fatal error: Call to a member function query() on a non-object in /var/www/html/UserDetails.php on line 8
在问题文件UserDetails.php
中,我有:
require_once('volleyLogin.php');
在volleyLogin.php
我有:
require_once('dbConnect.php');
我认为通过在volleyLogin.php
中要求UserDetails.php
,我还需要dbConnect.php
的变量进入UserDetails.php
的范围,但这不是案件。
在我UserDetails.php
我改变了这个:
require_once('volleyLogin.php');
到此:
require_once('volleyLogin.php');
require_once('dbConnect.php');
现在它正常工作。
答案 2 :(得分:0)
尝试更改:
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//do stuff here
textView2.setText("Failed");
}
}
要:
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//do stuff here
textView2.setText("Failed" + error.toString());
}
}
答案 3 :(得分:0)
你没有在你的php文件中提供任何响应头,所以基本上你的服务器可以解释这个不同,如果响应代码!= 200,你将收到错误。
答案 4 :(得分:0)
如果我删除了UserDetails.php之间的代码,那么我的 回答是'是'。
这个以及包含Unexpected response code 500
的截屏视频指向UserDetails.php
脚本中的错误。
你知道我做错了吗?
因为您只显示脚本的一部分(volleyLogin.php
缺失),所以不能再给您的代码提示。
我要做的第一件事是检查您的实时网络服务器的错误日志。
此外,我会编写一个简单的html页面来测试您的实时服务器上的UserDetails.php
脚本。像这样:
<html>
<head>
</head>
<body>
<form action="UserDetails.php" method="POST">
<input type="text" name="username" value="myusername">
<input type="submit" value="Test">
</form>
</body>
</html>
只有在此测试显示所需结果时,我才会继续实施Android部分。
说明它在localhost上的工作方式,而不是在服务器上,同样如此 代码。
与实时Web服务器相比,本地主机上脚本的不同行为可能是任一平台上Web服务器守护程序的不同配置的结果(例如php.ini,apache2.conf等,具体取决于Web服务器)你用)。