2016-03-24 5 views
0

Ich habe einen Webservice, der eine Liste von Bildern (Profilbildern) und deren Namen und ID-Nr. Einige der Mitglieder haben kein Profilbild. Also füge ich ein Standardbild von drawbar hinzu. Ich benutze Volley Post und Pojo, um Json zu holen und die Bilder und Namen in Gridview hinzuzufügen. Aber anstatt Bilder und Namen anzuzeigen, wird JSON mit der Fehlermeldung "No value for profile_picture" angezeigt. This ist mein JSON-Ergebnis. So würde jede Hilfe bei der Beschaffung der Bilder und Namen sehr geschätzt werden.JSON Fehler: Kein Wert für profile_picture

Main fragment: 
 

 
public class SearchName extends Fragment{ 
 

 
    private GridView mGridView; 
 
    private GridItem newItem; 
 
    private GridAdapter mGridAdapter; 
 
    private ArrayList<GridItem> mGridData; 
 
    public static final String KEY_USERID = "user_id", KEY_NAME = "search_text"; 
 
    private static final String FETCH_ALL_MEMBERS = "http://example.com/api/member/get-all/"; 
 
    String profile_picture = ""; 
 

 
    @Nullable 
 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
 
     return inflater.inflate(R.layout.searchname, container, false); 
 
    } 
 

 
    @Override 
 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
 
     super.onViewCreated(view, savedInstanceState); 
 

 
     mGridView = (GridView)view.findViewById(R.id.grid_view); 
 

 
     displayLog(); 
 

 
     mGridData = new ArrayList<>(); 
 
     mGridAdapter = new GridAdapter(getContext(), R.layout.gridrow, mGridData); 
 
     mGridView.setAdapter(mGridAdapter); 
 

 

 

 
    } 
 

 
    private void displayLog() { 
 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, FETCH_ALL_MEMBERS, 
 
       new Response.Listener<String>() { 
 
        @Override 
 
        public void onResponse(String response) { 
 

 
         try { 
 
          JSONObject jObj = new JSONObject(response); 
 

 
          System.out.println(jObj); 
 

 
          String status = jObj.getString("status"); 
 

 
          // Now check status value 
 
          if (status.equals("0")) { 
 
           Toast.makeText(getActivity(), "There was some error! Please try again.", Toast.LENGTH_LONG).show(); 
 
          } else if (status.equals("1")) { 
 

 

 
           JSONArray result = jObj.getJSONArray("result"); 
 
           for (int i = 0; i < result.length(); i++) { 
 
            JSONObject json_data = result.getJSONObject(i); 
 
            String name = json_data.getString("name"); 
 
            String user_id = json_data.getString("user_id"); 
 
            //String profile_picture = json_data.getString("profile_picture"); 
 

 
            newItem.setName(name); 
 
            newItem.setUserId(user_id); 
 
            if(json_data.has("profile_picture")){ 
 

 
             //String image_def = String.valueOf(R.drawable.default_profile); 
 
             newItem.setImage(json_data.getString("profile_picture")); 
 

 
            }else{ 
 

 
             Uri path = Uri.parse("android.resource://com.sam.fitlincsearch/" + R.drawable.default_profile); 
 
             String image_def = path.toString(); 
 
             newItem.setImage(image_def); 
 

 
            } 
 

 

 
            mGridData.add(newItem); 
 
           } 
 

 

 
           mGridAdapter.notifyDataSetChanged(); 
 

 
          } else { 
 
           // Error in login. Get the error message 
 
           String errorMsg = jObj.getString("error_msg"); 
 
           Toast.makeText(getActivity(), errorMsg, Toast.LENGTH_LONG).show(); 
 
          } 
 
         } catch (JSONException e) { 
 
          // JSON error 
 
          e.printStackTrace(); 
 
          Toast.makeText(getActivity(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
 
         } 
 
        } 
 
       }, new Response.ErrorListener() { 
 
      @Override 
 
      public void onErrorResponse(VolleyError error) { 
 
       Toast.makeText(getActivity(), error.toString(), Toast.LENGTH_LONG).show(); 
 
      } 
 
     }) { 
 
      @Override 
 
      protected Map<String, String> getParams() { 
 
       Map<String, String> params = new HashMap<String, String>(); 
 
       params.put(KEY_USERID, "1"); 
 
       return params; 
 
      } 
 

 
     }; 
 

 
     RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
 
     requestQueue.add(stringRequest); 
 
    } 
 
}
Adapter: 
 

 
public class GridAdapter extends ArrayAdapter<GridItem> { 
 

 
    private Context mContext; 
 
    int resource; 
 
    private ArrayList<GridItem> mGridData = new ArrayList<GridItem>(); 
 

 
    public GridAdapter(Context mContext, int resource, ArrayList<GridItem> mGridData) { 
 
     super(mContext, resource, mGridData); 
 
     this.resource = resource; 
 
     this.mContext = mContext; 
 
     this.mGridData = mGridData; 
 
    } 
 

 
    public void setGridData(ArrayList<GridItem> mGridData) { 
 
     this.mGridData = mGridData; 
 
     notifyDataSetChanged(); 
 
    } 
 

 
    @Override 
 
    public GridItem getItem(int position) { 
 
     return super.getItem(position); 
 
    } 
 

 

 

 
    @Override 
 
    public View getView(int position, View convertView, ViewGroup parent) { 
 
     View v = convertView; 
 

 
     ViewHolder holder; 
 
     if (v == null) { 
 
      holder = new ViewHolder(); 
 
      LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); 
 

 
       v = inflater.inflate(R.layout.gridrow, parent, false); 
 
       holder.image = (ImageView) v.findViewById(R.id.item_image); 
 
       holder.name = (TextView) v.findViewById(R.id.item_name); 
 

 
      holder.image = (ImageView) v.findViewById(R.id.item_image); 
 
      v.setTag(holder); 
 
     } else { 
 
      holder = (ViewHolder) v.getTag(); 
 
     } 
 

 

 
      GridItem item = mGridData.get(position); 
 
      Picasso.with(mContext) 
 
        .load(item.getImage()) 
 
        .placeholder(R.drawable.placeholder) 
 
        .fit() 
 
        .into(holder.image); 
 
      holder.name.setText(item.getName()); 
 

 

 
     return v; 
 
    } 
 

 
    class ViewHolder { 
 
     ImageView image, icon; 
 
     TextView name; 
 
    } 
 

 
}
Pojo: 
 

 
public class GridItem { 
 
    private String nameUrls, imageUrls, sportsCat, userId; 
 

 
    public GridItem() { 
 
     super(); 
 
    } 
 

 
    public String getImage() { 
 
     return imageUrls; 
 
    } 
 

 
    public void setImage(String imageUrls) { 
 
     this.imageUrls = imageUrls; 
 
    } 
 

 
    public String getName() { 
 
     return nameUrls; 
 
    } 
 

 
    public void setName(String nameUrls) { 
 
     this.nameUrls = nameUrls; 
 
    } 
 

 
    public String getSportsCat(){ 
 
     return sportsCat; 
 
    } 
 

 
    public void setSportsCat(String sportsCat){ 
 
     this.sportsCat = sportsCat; 
 
    } 
 

 
    public String getUserId(){ 
 
     return userId; 
 
    } 
 

 
    public void setUserId(String userId){ 
 
     this.userId = userId; 
 
    } 
 
}

+0

wo Sie Json Antwort? stellen Sie das auch zur Verfügung –

+0

Bitte überprüfen Sie meine editierten Post. Es enthält den Link. – Sam

+0

Sie müssen überprüfen, ob das Profilbild-Tag vorhanden ist oder nicht? lass mich die anwer hinzufügen –

Antwort

1

Sie müssen Überprüfen Sie die Zeichenfolge wie folgt

String profile_picture = ""; 
if(json_data.has("profile_picture")){ 
    profile_picture = json_data.getString("profile_picture"); 
}else{ 
    profile_picture = ""; 
} 

Ihr neues Element ist null.

müssen Sie es so für Schleife innerhalb der ersten initialisieren

newItem = new GridItem(); 
+0

Immer noch die NullPointerException und seine in der Zeile "newItem.setName (name);". – Sam

+0

Was ist in Zeile 92 –

+0

auch aktualisieren Sie den Code. Ich wan, um zu überprüfen, wie Sie die Bedingung hinzugefügt, dass ich –

0

Was dies versucht, statt zu überprüfen, ob Profilbild null ist, Sie überprüfen, ob die JSON den profile_picture zum Beispiel enthalten

If (!json_data.has("profile_picture"))){ 

            //String image_def = String.valueOf(R.drawable.default_profile); 
            Uri path = Uri.parse("android.resource://com.sam.fitlincsearch/" + R.drawable.default_profile); 
            String image_def = path.toString(); 
            newItem.setImage(image_def); 
           }else{ 
            newItem.setImage(json_data.getString("profile_picture"); 
           } 
+0

generieren Ich bekomme NullPointerException. http://hastebin.com/buhuvamiqi.avrasm @Andy – Sam