我從主要活動攜帶產品ID到詳細活動,然後進行評論活動。我正在使用Volley和Android Studio。我有一個從遠程數據庫填充的列表視圖。當一個項目被點擊時,這些項目的id將通過一個意圖傳遞給該細節活動。在詳細的活動中,當用戶點擊FAB時,該產品ID也會使用意圖傳遞給評論活動。當我點擊FAB時,評論活動打開但沒有顯示任何內容。我的Android Studio中的logcat,我收到以下錯誤:錯誤嘗試POST指定的「ID」到服務器的JSON響應與Android Volley
Comments: Error: org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONArray
這是檢索指定產品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);
?>
詳細活動
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);
}
});
評論動態
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();
}
}
產品在一張表中,並且註釋位於單獨的表中。這就是爲什麼我要通過意圖傳遞「pid」。我正在嘗試僅針對與給定「pid」相對應的註釋獲取註釋的JSON響應。 comments表看起來是這樣的:
- PID(產品ID)
- CID(註釋ID)
- 用戶名
- 評論
編輯 如果我輸入以下網址在我的瀏覽器中,
我得到以下JSON響應..
[
{
"pid": "2",
"cid": "1",
"username": "john",
"comment": "one of my favorites"
},
{
"pid": "2",
"cid": "2",
"username": "jane",
"comment": "this was so yummy"
}
]
因此,必須有我的Android代碼中的東西,導致錯誤
我很抱歉,之前設置的內容類型的JSON在頭
把
header('Content-Type: application/json');
在你的PHP文件,但我不明白你的意思。我不是那種先進的編程。你能再解釋一下嗎? –這意味着你在響應人身上有html標籤,比如'
',這在json中是不可接受的 –
那麼我該如何解決這個問題呢?或者,如何找到不需要的標籤? –