未定义的变量:query_params

时间:2014-02-11 02:31:50

标签: php android json listview

有人可以帮我解决这个错误吗? 因为,代码的结果是json格式的成功。但仍有错误“Undefined variable:query_params”。

我想从这个json格式在我的android程序中制作listview。在我的android中,它无法从我的comments.php中显示成功的json格式。我想,也许是因为这个错误“Undefined variable:query_params”。

enter image description here

这是我的评论.php

<?php


require("config.inc.php");

//initial query
$query = "Select * FROM comments";

//execute query
try {
$stmt   = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error!";
die(json_encode($response));
}


$rows = $stmt->fetchAll();


if ($rows) {
$response["success"] = 1;
$response["message"] = "Post Available!";
$response["posts"]   = array();

foreach ($rows as $row) {
    $post             = array();
    $post["post_id"]  = $row["post_id"];
    $post["username"] = $row["username"];
    $post["title"]    = $row["title"];
    $post["message"]  = $row["message"];


    //update our repsonse JSON data
    array_push($response["posts"], $post);
}

// echoing JSON response
echo json_encode($response);


} else {
$response["success"] = 0;
$response["message"] = "No Post Available!";
die(json_encode($response));
}

?>

这是我的android编码从comments.php读取json格式以制作listview。列表视图没有任何显示。

ReadComments.java

import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class ReadComments extends ListActivity {


private ProgressDialog pDialog;


private static final String READ_COMMENTS_URL = "http://192.168.56.101/webservice/comments.php";


private static final String TAG_SUCCESS = "success";
private static final String TAG_TITLE = "title";
private static final String TAG_POSTS = "posts";
private static final String TAG_POST_ID = "post_id";
private static final String TAG_USERNAME = "username";
private static final String TAG_MESSAGE = "message";

private JSONArray mComments = null;
private ArrayList<HashMap<String, String>> mCommentList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // note that use read_comments.xml instead of our single_post.xml
    setContentView(R.layout.read_comments);
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    // loading the comments via AsyncTask
    new LoadComments().execute();
}

public void addComment(View v) {
    Intent i = new Intent(ReadComments.this, AddComment.class);
    startActivity(i);
}


public void updateJSONdata() {


    mCommentList = new ArrayList<HashMap<String, String>>();
    JSONParser jParser = new JSONParser();
    JSONObject json = jParser.getJSONFromUrl(READ_COMMENTS_URL);

    try {
        mComments = json.getJSONArray(TAG_POSTS);
        for (int i = 0; i < mComments.length(); i++) {
            JSONObject c = mComments.getJSONObject(i);


            String title = c.getString(TAG_TITLE);
            String content = c.getString(TAG_MESSAGE);
            String username = c.getString(TAG_USERNAME);


            HashMap<String, String> map = new HashMap<String, String>();

            map.put(TAG_TITLE, title);
            map.put(TAG_MESSAGE, content);
            map.put(TAG_USERNAME, username);


            mCommentList.add(map);


        }

    } catch (JSONException e) {
        e.printStackTrace();
    }
}


private void updateList() {
    ListAdapter adapter = new SimpleAdapter(this, mCommentList,
            R.layout.single_post, new String[] { TAG_TITLE, TAG_MESSAGE,
                    TAG_USERNAME }, new int[] { R.id.title, R.id.message,
                    R.id.username });

    setListAdapter(adapter);
    ListView lv = getListView();    
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
        }
    });
}

public class LoadComments extends AsyncTask<Void, Void, Boolean> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(ReadComments.this);
        pDialog.setMessage("Loading Comments...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    @Override
    protected Boolean doInBackground(Void... arg0) {
        updateJSONdata();
        return null;

    }

    @Override
    protected void onPostExecute(Boolean result) {
        super.onPostExecute(result);
        pDialog.dismiss();
        updateList();
    }
}
 }

2 个答案:

答案 0 :(得分:2)

您看到“未定义变量”错误,因为您在定义变量应包含的内容之前尝试在$query_params语句中使用变量execute()。请参阅this answer

您也不需要发送到$query_params语句的execute(),了解您未在$query中使用任何参数。请参阅this PHP manual on PDO Statement

因此,要修复错误,只需更改此内容:

$result = $stmt->execute($query_params);

对此:

$result = $stmt->execute();

答案 1 :(得分:1)

因此,要修复错误,只需更改此内容:

$ result = $ stmt-&gt;执行($ query_params);

对此:

$ result = $ stmt-&gt; execute();

当我按照你说的改变时,我得到了这个

{“success”:0,“message”:“数据库错误!”}