2016-06-01 6 views
-1

Ich praktiziere Umsetzung recyclerView (mein erstes Mal), auf Fragments, und ich möchte diese Daten von meinem Server (phpMyAdmin) abrufen. Ich habe einen kleinen Hintergrund mit PHP und MySQL. Alles, was ich will, ist, meine Daten in einer sehr einfachen Weise zu holen und meine Daten in einem cardView - recyclerView anzuzeigen. Wie ich meinen Java-Code überprüfe, scheint es gerade jetzt (nach der Korrektur).Parse Fehler abgerufen JsonArrayRequest mit PHP zu RecyclerView On Fragments Volley

Als ich meine App debuggen, habe ich festgestellt, dass es nicht zu meinem onResponse gehen wird, stattdessen geht es zu ErrorResponse. Wie analysiere ich das richtig?

Hier ist mein Fragment: 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); 

Mein Adapter: 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); 

    } 

} 

Mein PHP-Code: 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); 
    } 

//} 

ParseError

+1

auch nicht '' organizationDataList –

+0

@ ρяσѕρєя K ja Recht – Nisarg

Antwort

2

Im onResponse Ihre parseJSONData, erstellen Sie ein neues OrganizationData Objekt und richtig analysieren, aber Sie nie dieses Objekt zu einer Liste hinzufügen.

Sie vermissen organizationDataList.add(organizationData); in Ihrer for-Schleife.

würde Noch ein Tipp, dass sie entweder notifyItemInserted direkt nach diesem Aufruf oder Ihre notifyDataSetChanged nach der Schleife bewegen :)

+0

In meinem PHP-Code initialisiert wird, ist es richtig? Ich bezweifle auch, dass es von meinem phpCode verursacht wurde .. Ich werde meine for-Schleife überprüfen. Vielen Dank für Ihre Zeit. – RoCk

+0

SIR, kannst du mir mit diesem helfen? Der Fehler im Bild. – RoCk

+0

Nun, ich bin nicht vertraut mit PHP, aber der Fehler scheint zu sein, weil das Format von Ihrem Server zurückgegeben wird nicht korrekt formatiert oder nicht json formatiert. Wie hier vorgeschlagen (http://stackoverflow.com/a/25493444/4706693), versuchen Sie 'RESTClient' zu installieren und sehen Sie, was passiert – NSimon

1

einfach diese Zeile in der for-Schleife

organizationDataList.add (organizationData) hinzufügen;

orgListAdapter.notifyDataSetChanged(); // nach Schleife

+0

Noch habe ich keine Antwort.:( – RoCk

+0

@RoCk initialisierten Sie organizationDataList? Und debuggen Sie Ihre parseJSONData() Sie erhalten es – Nisarg

+0

Ist das, was Sie meinen? ArrayList organizationDataList = neue ArrayList <>(); – RoCk

0

Versuchen Sie, Retrofit zu verwenden. Es ist schneller als Volley und Sie müssen Ihre JSON (Standard JSON Response) nicht analysieren. Als Nachrüstung akzeptiert nur das Standard-JSON-Format. Sie müssen die Haupt-MODEL-Klasse übergeben, um Daten zu speichern. Hier ist das große Tutorial. Sie müssen den JSON nie analysieren. Verwenden Sie einfach und erhalten Sie die Daten von response.body.yourPOJO();

Versuchen Sie dies, wenn es hilft.

http://www.androidwarriors.com/2015/12/retrofit-20-android-example-web.html