【问题标题】:.getImage() on a null object reference android [duplicate].getImage() 上的空对象引用 android [重复]
【发布时间】:2018-12-31 14:15:59
【问题描述】:

我有一个片段。单击图像后,我开始活动。但我不断收到此错误

Unable to start activity ComponentInfo{com.flag.app/com.flag.app.app.activity.MarkerDetailsActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method 'com.flag.app.app.model.Image com.flag.app.app.model.Marker.getImage()' 
on a null object reference

所以,这是我的活动

public class MarkerDetailsActivity extends AppCompatActivity {

public static Intent getStartIntent(Context context, Marker marker) {
    Intent startIntent = new Intent(context, MarkerDetailsActivity.class);
    startIntent.putExtra(EXTRA_MARKER, marker);
    return startIntent;
}


ImageView mImageView;
TextView mNameTextView;
Marker mMarker;
MapView mMapView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_details_marker);
    mMarker = getIntent().getParcelableExtra(EXTRA_MARKER);

    mImageView = findViewById(R.id.image_view);
    mMapView = findViewById(R.id.map_view);
    mMapView.onCreate(savedInstanceState);
    bindMarker(mMarker);
}

private void bindMarker(Marker marker) {
    Picasso.with(mImageView.getContext())
            .load(marker.getImage().getUrl())
            .into(mImageView);
    mAuthorTextView.setText(marker.getAuthor());
    mDescriptionTextView.setText(marker.getDescription());
    mDateTextView.setText(marker.getDate());

}
   }

如何解决?

【问题讨论】:

  • 你怎么知道getParcelableExtra实际上返回了一个值?
  • getParcelableExtra 实际上没有返回值?如何解决?
  • 这是一个问题还是一个验证?你需要展示你是如何使用 getStartIntent 方法的

标签: android android-fragments android-activity nullpointerexception


【解决方案1】:

检查空值。

private void bindMarker(Marker marker) {
if(marker != null){
    Picasso.with(mImageView.getContext())
            .load(marker.getImage().getUrl())
            .into(mImageView);
    mAuthorTextView.setText(marker.getAuthor());
    mDescriptionTextView.setText(marker.getDescription());
    mDateTextView.setText(marker.getDate());

}}

【讨论】:

  • 标记的图像仍可能为空
【解决方案2】:
private void bindMarker(Marker marker) {
    if(marker!=null){
        if(marker.getImage()!=null) {
            Picasso.with(mImageView.getContext())
                    .load(marker.getImage().getUrl())
                    .into(mImageView);
        }
        mAuthorTextView.setText(marker.getAuthor());
        mDescriptionTextView.setText(marker.getDescription());
        mDateTextView.setText(marker.getDate());
    }
}

在使用Marker之前必须检查对象是否为空

【讨论】:

    猜你喜欢
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多