[英]Parse Error Retrieved JsonArrayRequest Using PHP to RecyclerView On Fragments Volley
我正在練習在Fragments
上實現recyclerView
(我第一次),我想從服務器(phpMyAdmin)檢索這些數據。 我對php和mysql有一點了解。 我想要的只是以一種非常簡單的方式獲取我的數據,並在cardView
- recyclerView
顯示我的數據。 當我查看我的Java代碼時,現在看來(已得到糾正)。
在調試應用程序時,我發現它不會轉到我的onResponse
而是轉到ErrorResponse
。 我如何解析這個權利?
這是我的片段: OrganizationAboutFragment .java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
recyclerView = (RecyclerView) inflater.inflate(
R.layout.recycler_view, container, false);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setHasFixedSize(true);
orgListAdapter = new OrgListAdapter(organizationDataList);
recyclerView.setAdapter(orgListAdapter);
//GET DATA REQUEST
parseJSONData();
return recyclerView;
}
public void parseJSONData(){
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
JsonArrayRequest jsonArray = new JsonArrayRequest(ServerScripts.PHP_SCRIPT_PATH + ServerScripts.PHP_GET_FEEDS, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
if (response.length() > 0){
try {
organizationDataList.clear();
for (int i = 0; i < response.length(); i++ ){
JSONObject jsonObject = response.getJSONObject(i);
OrganizationData organizationData = new OrganizationData();
//SQL TABLE NAME
if (!jsonObject.isNull("orgName")){
organizationData.orgName = jsonObject.getString("orgName");
}
if (!jsonObject.isNull("orgDesc")){
organizationData.orgDesc = jsonObject.getString("orgDesc");
}
if (!jsonObject.isNull("orgCategory")){
organizationData.orgCategory = jsonObject.getString("orgCategory");
}
if (!jsonObject.isNull("orgCurrentMembers")){
organizationData.orgCurrentMembers = jsonObject.getInt("orgCurrentMembers");
}
if (!jsonObject.isNull("orgMaxMembers")){
organizationData.orgMaxMembers = jsonObject.getInt("orgMaxMembers");
}
if (!jsonObject.isNull("orgType")){
organizationData.orgType = jsonObject.getString("orgType");
}
//ADD
organizationDataList.add(organizationData);
}
//NOTIFY
orgListAdapter.notifyDataSetChanged();
}catch (Exception e){
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue.add(jsonArray);
我的適配器: OrgListAdapter.java
public class OrgListAdapter extends RecyclerView.Adapter<OrgListAdapter.OrgViewHolder>{
private List<OrganizationData> mOrganizationData;
public OrgListAdapter(List<OrganizationData> mOrganizationData){
this.mOrganizationData = mOrganizationData;
}
@Override
public OrgViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_cardview_flat_organizations,parent,false);
OrgViewHolder myOrgViewHolder = new OrgViewHolder(view);
return myOrgViewHolder;
}
@Override
public void onBindViewHolder(OrgViewHolder holder, int position) {
//ORG MODELS PASS TO CARD VIEW - HOLDER
holder.appCompatTextViewName.setText(mOrganizationData.get(position).getOrgName());
holder.appCompatTextViewCategory.setText(mOrganizationData.get(position).getOrgCategory());
holder.appCompatTextViewDesc.setText(mOrganizationData.get(position).getOrgDesc());
holder.appCompatTextViewJoinMembers.setText(mOrganizationData.get(position).getOrgCurrentMembers());
holder.appCompatTextViewMaxMembers.setText(mOrganizationData.get(position).getOrgMaxMembers());
}
@Override
public int getItemCount() {
if (mOrganizationData != null){
return mOrganizationData.size();
}
return 0;
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
public static class OrgViewHolder extends RecyclerView.ViewHolder{
CardView cardViewOrg;
AppCompatTextView appCompatTextViewName;
AppCompatTextView appCompatTextViewDesc;
AppCompatTextView appCompatTextViewJoinMembers;
AppCompatTextView appCompatTextViewMaxMembers;
AppCompatTextView appCompatTextViewCategory;
AppCompatImageView appCompatImageViewOrgType;
String getDataStoredUniqueId = "";
//Buttons
AppCompatButton appCompatButtonJoin;
AppCompatButton appCompatButtonFollow;
AppCompatButton appCompatButtonReadMore;
public OrgViewHolder(View getView){
super(getView);
cardViewOrg = (CardView) getView.findViewById(R.id.card_view_org);
appCompatTextViewName = (AppCompatTextView) getView.findViewById(R.id.textViewOrgName);
appCompatTextViewCategory = (AppCompatTextView) getView.findViewById(R.id.textViewCategory);
appCompatTextViewDesc = (AppCompatTextView) getView.findViewById(R.id.textViewOrgShortDesc);
appCompatTextViewJoinMembers = (AppCompatTextView) getView.findViewById(R.id.currentMembers);
appCompatTextViewMaxMembers = (AppCompatTextView) getView.findViewById(R.id.maxMembers);
appCompatImageViewOrgType = (AppCompatImageView) getView.findViewById(R.id.orgTypeIndicator);
//Buttons
appCompatButtonJoin = (AppCompatButton) getView.findViewById(R.id.imageButtonJoined);
appCompatButtonFollow = (AppCompatButton) getView.findViewById(R.id.imageButtonFollow);
appCompatButtonReadMore = (AppCompatButton) getView.findViewById(R.id.buttonMoreOrg);
}
}
我的php代碼: orgList.php
<?php
//if($_SERVER['REQUEST_METHOD'] == ''){
require('dbConnect.php');
$SQLi_ORG_FEEDS = "SELECT organizationName,organizationDescription,organizationCategory,
organizationCurrentMembers,organizationMaxMembersNo,organizationType FROM org_information";
$query = mysqli_query($dbConnect,$SQLi_ORG_FEEDS) or die("Error".mysqli_error($dbConnect));
$checkRow = mysqli_num_rows($query);
$response = array();
if($checkRow > 0){
while ($getRecord = mysqli_fetch_array($query)) {
$response["organizationName"] = $getRecord;
$response["organizationType"] = $getRecord;
$response["organizationDescription"] = $getRecord;
$response["organizationCategory"] = $getRecord;
$response["organizationCurrentMembers"] = $getRecord;
$response["organizationMaxMembersNo"] = $getRecord;
}
echo json_encode($response);
}
//}
在parseJSONData
的onResponse
中,創建一個新的OrganizationData
對象並正確地進行解析,但是您絕不會將此對象添加到任何列表中。
您缺少organizationDataList.add(organizationData);
在您的for循環中。
另一個提示是要么在此之后立即調用notifyItemInserted
,要么在循環之后移動notifyDataSetChanged
:)
只需在您的for循環中添加此行
organizationDataList.add(organizationData);
orgListAdapter.notifyDataSetChanged(); //循環后
嘗試使用改造。 它比截擊更快,並且您無需解析JSON(標准JSON響應)。 改造僅接受標准JSON格式。 您必須傳遞Main MODEL類來存儲數據。 這是很棒的教程。 您將不必解析JSON。 只需使用並從response.body.yourPOJO();中獲取數據;
如果有幫助,請嘗試此操作。
http://www.androidwarriors.com/2015/12/retrofit-20-android-example-web.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.