Error trying to POST specified “id” to server for

2019-09-10 04:46发布

I am carrying over a product id from the main activity to a detail activity then on to a comments activity. I am using Volley and Android Studio. I have a listview populated from a remote database. When an item is clicked, the items' id is passed to the detail activity using an intent. In the detail activity, when the user clicks on a FAB, that products id is passed over to the comments activity also using an intent. When I click on the FAB the comments activity opens but doesn't show anything. I the logcat within Android Studio, I get the following error:

Comments: Error: org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONArray

This is the PHP code for retrieving the comments for the specified product id:

    <?php
include_once("config.php");

$query=mysqli_query($con,"SELECT * FROM comments WHERE pid=".$_GET['pid']);

$array;
while($result=mysqli_fetch_assoc($query)){

$array[]=$result;
}

echo json_encode($array);
?>

Detail Activity

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.commentsfab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Pass the image title and url to DetailsActivity
                Intent intentTwo = new Intent(ProductsDetail.this, Comments.class);
                intentTwo.putExtra("pid", pid);
                intentTwo.putExtra("name", name);
                intentTwo.putExtra("image", img);
                intentTwo.putExtra("rating", rating);

                //Start comments activity
                startActivity(intentTwo);
            }
        });

Comments Activity

    public class Comments extends AppCompatActivity {
    private ProgressDialog dialog=null ;
    private NetworkImageView cmntImg;
    private TextView cmtjjTxt;
    private RatingBar cmntRB;
    private String TAG="Comments";
    private String tag_json_arry = "json_array_req";
    private String url = "http://192.168.0.5:80/demoapp";
    private String url_file="/comments.php";
    private CommentsAdapter adapter;
    private ListView list;
    ArrayList<CommentsRowData> cmntrowdata;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.comments);

        final String pid = getIntent().getStringExtra("pid");
        final String name = getIntent().getStringExtra("name");
        final String img = getIntent().getStringExtra("image");
        final String rating = getIntent().getStringExtra("rating");

        list=(ListView)findViewById(R.id.commentsList);
        cmntrowdata=new ArrayList<CommentsRowData>();

        dialog= new ProgressDialog(this);

        dialog.setMessage("Loading...");
        dialog.show();

        cmntImg = (NetworkImageView)findViewById(R.id.picComments);
        cmntImg.setImageUrl(img, VolleyController.getInstance().getImageLoader());
        cmtjjTxt = (TextView)findViewById(R.id.titleComments);
        cmtjjTxt.setText(name);
        cmntRB = (RatingBar)findViewById(R.id.ratingBar3);
        cmntRB.setRating(Float.valueOf(rating));

        JsonArrayRequest request = new JsonArrayRequest(url+url_file,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString()); try {
                            for(int i=0;i<response.length();i++){
                                String pid=response.getJSONObject(i).getString("pid");
                                String cid=response.getJSONObject(i).getString("cid");
                                String username = response.getJSONObject(i).getString("username");
                                String comment = response.getJSONObject(i).getString("comment");

                                cmntrowdata.add(new CommentsRowData(pid,cid,username,comment));
                            }
                        } catch (JSONException e) {

                            e.printStackTrace();
                        }
                        adapter=new CommentsAdapter(Comments.this, cmntrowdata);
                        list.setAdapter(adapter);
                        dialog.dismiss();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d(TAG, "Error: " + error.getMessage());
                dialog.dismiss();
            }

            //@Override
            protected Map<String, String> getParams(){
                Map<String,String> params = new HashMap<String,String>();
                params.put("pid",pid);
                return params;
            }
        });

        VolleyController.getInstance().addToRequestQueue(request, tag_json_arry);




    }

    @Override
    protected void onResume() {
        super.onResume();

    }

    @Override
    protected void onPause() {
        super.onPause();

    }

}

Products are in one table and the comments are in a separate table. Thats why I'm passing the "pid" over with an intent. I'm trying to get the JSON response of comments for only comments that correspond with the given "pid". The comments table looks like this:

  • pid(product id)
  • cid(comment id)
  • username
  • comment

EDIT If I enter the following URL in my browser,

http://localhost/demoapp/comments.php?sid=2

I get the following JSON response..

    [
    {
        "pid": "2",
        "cid": "1",
        "username": "john",
        "comment": "one of my favorites"
    },
    {
        "pid": "2",
        "cid": "2",
        "username": "jane",
        "comment": "this was so yummy"
    }
]

So there has to be something within my Android code that is causing the error

1条回答
【Aperson】
2楼-- · 2019-09-10 05:09

For JSON parsing u should have header specifying the content to be json. As the error suggests you are just echoing the json data in the html. You get such when the received data is in html file. Try setting the content type to json in the header

put header('Content-Type: application/json'); in your php file before echoing

查看更多
登录 后发表回答