2017-04-04 96 views
-1

在下面的代碼中,我將imageUrl從json響應中取爲null。所以應用程序崩潰。下面是代碼 片段獲取json響應爲空

public class ReviewFragment extends BaseFragment { 
private ListView mListView; 
private ViewSwitcher mEmptyView; 
private ReviewAdapter mReviewAdapter; 
private List<Review> reviews; 

@Override 
protected String getScreenName() { 
    return "Reviews"; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_my_review, null); 
    enableToolbar(true, view, getString(R.string.label_my_reviews)); 
    mReviewAdapter = new ReviewAdapter(getContext(), R.layout.view_review_list_item); 

    mListView = (ListView) view.findViewById(R.id.list); 
    mEmptyView = (ViewSwitcher) view.findViewById(R.id.empty); 
    getLoaderManager().initLoader(1, null, mMyReviewCallback); 
    mListView.setAdapter(mReviewAdapter); 
    return view; 
} 

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

} 

private LoaderManager.LoaderCallbacks<List<Review>> mMyReviewCallback = 
     new LoaderManager.LoaderCallbacks<List<Review>>() { 
      @Override 
      public Loader<List<Review>> onCreateLoader(int id, Bundle args) { 
       mEmptyView.setDisplayedChild(0); 
       mEmptyView.setVisibility(View.VISIBLE); 
       return new Review.MyReviewLoader(getActivity()); 
      } 

      @Override 
      public void onLoadFinished(Loader<List<Review>> loader, List<Review> data) { 

       updateReviews(data); 
      } 

      @Override 
      public void onLoaderReset(Loader<List<Review>> loader) { 

      } 
     }; 

private void updateReviews(List<Review> reviewList) { 
    if (reviewList.size() > 0) { 
     mEmptyView.setVisibility(View.GONE); 
     mReviewAdapter.clear(); 
     this.reviews = reviewList; 
     if (reviews.size() == 0) { 
      mEmptyView.setDisplayedChild(1); 
      mEmptyView.setVisibility(View.VISIBLE); 
     } else { 

      mReviewAdapter.clear(); 
      mReviewAdapter.addAll(reviews); 
     } 
    } else { 
     mEmptyView.setDisplayedChild(1); 
     mEmptyView.setVisibility(View.VISIBLE); 
    } 


}} 

適配器

class ReviewAdapter extends ArrayAdapter<Review> { 

private static final String TAG = "ReviewAdapter"; 
private final int mResourceId; 

ReviewAdapter(Context context, int resource) { 
    super(context, resource); 
    mResourceId = resource; 
} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Holder holder; 
    if (convertView == null) { 
     convertView = View.inflate(getContext(), mResourceId, null); 
     holder = new Holder(convertView); 
    } else { 
     holder = (Holder) convertView.getTag(); 
    } 

    bindView(holder, position); 
    return convertView; 
} 

private void bindView(Holder holder, int position) { 
    final Review review = getItem(position); 
    Uri imageUri = review.getImageUri(Review.IMAGE_SQ,Beco.getApp().getDensity()); 

    ImageRequest request = ImageRequestBuilder.newBuilderWithSource(imageUri) 
      .setProgressiveRenderingEnabled(true) 
      .build(); 
    DraweeController controller = Fresco.newDraweeControllerBuilder() 
      .setImageRequest(request) 
      .setOldController(holder.storeLogo.getController()) 
      .build(); 
    GenericDraweeHierarchyBuilder builder = 
      new GenericDraweeHierarchyBuilder(getContext().getResources()); 
    GenericDraweeHierarchy hierarchy = builder 
      .setFadeDuration(200) 
      .setPlaceholderImage(ContextCompat.getDrawable(getContext(), R.drawable.image_deal_default)) 
      .build(); 

    holder.storeLogo.setHierarchy(hierarchy); 
    holder.storeLogo.setController(controller); 
    holder.background.setBackgroundColor(review.getColor()); 
    holder.storeName.setText(review.getName()); 
    holder.postedOn.setText(review.getCommentedOn()); 
    holder.comment.setText(review.getComments()); 
    holder.rating.setRating(review.getRating()); 
} 


private class Holder { 
    SimpleDraweeView storeLogo; 
    FrameLayout background; 
    TextView storeName; 
    TextView postedOn; 
    RatingBar rating; 
    TextView comment; 

    Holder(View convertView) { 
     convertView.setTag(this); 
     storeLogo = (SimpleDraweeView) convertView.findViewById(R.id.store_logo); 
     storeName = (TextView) convertView.findViewById(R.id.store_name); 
     postedOn = (TextView) convertView.findViewById(R.id.posted_on); 
     comment = (TextView) convertView.findViewById(R.id.comment); 
     rating = (RatingBar) convertView.findViewById(R.id.rating); 
     background = (FrameLayout) convertView.findViewById(R.id.store_background); 
    } 
}} 

Model類

public class Review { 
public static final String IMAGE_SQ = "_sq"; 
private static final String DEFAULT_STORE_COLOR = "FFFFFFFF"; 
private String user; 
private String[] imageUrl; 
private String name; 
private int rating; 
private String comments; 
private String commentedOn; 
private String color; 

public String getUser() { 
    return user; 
} 

imageUrl[1])); 
    } 
    return null; 
} 

@ColorInt 
public int getColor() { 
    if (color.length() < 6) 
     color = DEFAULT_STORE_COLOR; 

    String colorString = color.substring(0, 6); 
    String alphaString = color.substring(6); 

    if (alphaString.length() == 0) { 
     alphaString = "FF"; 
    } 

    int colorValue = Integer.parseInt(colorString, 16); 
    int alphaValue = Integer.parseInt(alphaString, 16); 
    return Color.argb(alphaValue, Color.red(colorValue), Color.green(colorValue), Color.blue(colorValue)); 
} 

public void setUser(String user) { 
    this.user = user; 
} 

public int getRating() { 
    return rating; 
} 

public void setRating(int rating) { 
      this.rating = rating; 
} 

public String getComments() { 
    return comments; 
} 

public void setComments(String comments) { 
    this.comments = comments; 
} 

public String getCommentedOn() { 
    return commentedOn; 
} 

public void setCommentedOn(String commentedOn) { 
    this.commentedOn = commentedOn; 
} 

public String getName() { 
    return name; 
} 

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

public static class MyReviewLoader extends ModelListLoader<Review> { 

    public MyReviewLoader(Context context) { 
     super(context); 

    } 

    @Override 
    public List<Review> fetch() { 
     return BecoApi.getClient().getReviews(); 
    } 
}} 

這是棧跟蹤

FATAL EXCEPTION: main 
                  Process: com.beco.ibeco, PID: 9950 
                  java.lang.NullPointerException 
                   at com.facebook.common.internal.Preconditions.checkNotNull(Preconditions.java:210) 
                   at com.facebook.imagepipeline.request.ImageRequestBuilder.setSource(ImageRequestBuilder.java:110) 
                   at com.facebook.imagepipeline.request.ImageRequestBuilder.newBuilderWithSource(ImageRequestBuilder.java:53) 
                   at com.beco.ibeco.app.account.ReviewAdapter.bindView(ReviewAdapter.java:56) 
                   at com.beco.ibeco.app.account.ReviewAdapter.getView(ReviewAdapter.java:48) 
                   at android.widget.AbsListView.obtainView(AbsListView.java:2346) 
                   at android.widget.ListView.measureHeightOfChildren(ListView.java:1281) 
                   at android.widget.ListView.onMeasure(ListView.java:1188) 
                   at android.view.View.measure(View.java:18811) 
                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                   at android.view.View.measure(View.java:18811) 
                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
                   at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
                   at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
                   at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
                   at android.view.View.measure(View.java:18811) 
                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                   at android.view.View.measure(View.java:18811) 
                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
                   at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:700) 
                   at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:767) 
                   at android.view.View.measure(View.java:18811) 
                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                   at android.view.View.measure(View.java:18811) 
                   at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716) 
                   at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462) 
                   at android.view.View.measure(View.java:18811) 
                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                   at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
                   at android.view.View.measure(View.java:18811) 
                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
                   at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
                   at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
                   at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
                   at android.view.View.measure(View.java:18811) 
                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                   at android.view.View.measure(View.java:18811) 
                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
                   at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
                   at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
                   at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
                   at android.view.View.measure(View.java:18811) 
                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                   at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2645) 
                   at android.view.View.measure(View.java:18811) 
                   at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2127) 
                   at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1243) 
                   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1479) 
                   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1134) 
                   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6045) 
                   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:860) 
                   at android.view.Choreographer.doCallbacks(Choreographer.java:672) 
                  at android. 

從這個適配器類的Uri imageUri我調試過程中得到的值爲空?任何一個請幫我

回答

1

試圖將您的字段String[] imageUrl;改爲ArrayList<String> imageUrl = new ArrayList<>();