2016-03-24 13 views
0

私は画像(プロフィール写真)のリストとその名前とID番号を返すWebサービスを持っています。メンバーの中にはプロフィール画像がありません。だから私はdrawableからデフォルトの画像を追加しています。私は、volleyポストとpojoを使用してjsonを取得し、画像と名前をgridviewに追加しています。しかし、画像と名前を表示する代わりに、 "profile_pictureの値がありません"というJSONエラーメッセージが表示されます。 Thisは私のjsonの結果です。だから、画像や名前を取得する上でのどんな助けも大歓迎です。 JSONエラー:profile_pictureの値がありません

+0

内部あなたが最初のようにそれを初期化する必要があり

どこJSONレスポンスはありますか?それも提供してください –

+0

私の編集した投稿をチェックしてください。そのリンクが含まれています。 – Sam

+0

プロフィール画像タグが存在するかどうかを確認する必要がありますか?アンウォールを追加させてください –

答えて

1

必要に見てチェックnullであるかどうかをチェックについてこのような文字列を確認してください

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

あなたのnewItemはnullです。 forループ

newItem = new GridItem(); 
+0

まだnewItem.setName(name);という行にNullPointerExceptionとその例外が表示されています。 – Sam

+0

何がオンラインですか? –

+0

もコードを更新します。私はあなたが私に言った条件をどのように追加したのか確認するのを躊躇します –

0

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; 
 
    } 
 
}
これは何をしようと、代わりのプロフィール画像を使用して、JSONは、例えばprofile_pictureが含まれている場合

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

私はNullPointerExceptionを取得しています。 http://hastebin.com/buhuvamiqi.avrasm @Andy – Sam

関連する問題