简体   繁体   English

尝试将指定的“ id”发布到服务器以进行Android Volley的json响应时出错

[英]Error trying to POST specified “id” to server for json response with Android Volley

I am carrying over a product id from the main activity to a detail activity then on to a comments activity. 我将产品ID从主要活动转移到详细活动,然后再转移到评论活动。 I am using Volley and Android Studio. 我正在使用Volley和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. 单击某个项目后,该项目的ID将使用意图传递给明细活动。 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. 在详细信息活动中,当用户单击FAB时,该产品ID也会使用意图传递给评论活动。 When I click on the FAB the comments activity opens but doesn't show anything. 当我单击FAB时,评论活动打开,但未显示任何内容。 I the logcat within Android Studio, I get the following error: 我在Android Studio中使用logcat时,出现以下错误:

Comments: Error: org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONArray 注释:错误:org.json.JSONException:类型java.lang.String的值<br不能转换为JSONArray

This is the PHP code for retrieving the comments for the specified product id: 这是用于检索指定产品ID的注释的PHP代码:

    <?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. 这就是为什么我故意传递“ pid”。 I'm trying to get the JSON response of comments for only comments that correspond with the given "pid". 我正在尝试仅获取与给定“ pid”相对应的注释的注释的JSON响应。 The comments table looks like this: 注释表如下所示:

  • pid(product id) pid(产品编号)
  • cid(comment id) cid(评论ID)
  • username 用户名
  • comment 评论

EDIT If I enter the following URL in my browser, 编辑如果我在浏览器中输入以下URL,

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

I get the following JSON response.. 我收到以下JSON响应。

    [
    {
        "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 所以我的Android代码中一定有导致错误的内容

For JSON parsing u should have header specifying the content to be json. 对于JSON解析,您应具有将内容指定为json的标头。 As the error suggests you are just echoing the json data in the html. 如错误所示,您只是在html中回显json数据。 You get such when the received data is in html file. 当接收的数据在html文件中时,您会收到这样的消息。 Try setting the content type to json in the header 尝试在标题中将内容类型设置为json

put header('Content-Type: application/json'); 放置header('Content-Type: application/json'); in your php file before echoing 在您的PHP文件中,然后回显

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在使用Android Volley将用户选择的评分发送到服务器并刷新带有json响应的评分栏时出错? - Error sending user selected rating to server and refreshing ratingbar with json response using Android Volley? 将Volley用于POST和JSONObject响应时出错 - Error when using Volley for POST and JSONObject Response Android:使用齐射向laravel服务器发布数据时出现意外响应代码500 - Android: Unexpected response code 500 on post data to laravel server using volley android volley post参数并接收json - android volley post parameter and receive json Android Volley:通过用户指定的id从MySQL数据库中选择数据 - Android Volley: select data from MySQL database by id specified by user 使用 Volley 库从 Android 在 PHP 服务器中接收 Json 数据 POST 方法 - Receive Json data POST method in PHP server from Android using Volley Library JSON数据未发送到Android Volley中的服务器 - Json data is not sending to server in android volley Android Studio尝试使用Volley向PHP发送数据并检索JSON数组给出错误 - Android Studio trying to send data and retrieve json array using volley to php gives out error 如何在来自Android JSON Post Volley的PHP中解码JSON - How to decode json in php coming from android json post volley Android Volley中的服务器错误仅在onCheckedChanged中的&#39;if(isChecked)&#39;上 - Server error in Android Volley only on 'if (isChecked)' in onCheckedChanged
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM