为什么我的排球响应会重新出现?#39;失败'在我的PHP文件?

时间:2016-09-17 10:06:13

标签: php android android-volley

我有一个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);
    }


}

5 个答案:

答案 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服务器)你用)。