2017-06-15 30 views
-2

我遇到此代码的问题。我试图从firebase数据库传递检索的字符串图像,但它不断崩溃,并且Firebasye显示此错误:异常java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String com.example.vujeva.Task.getImage ()”对空对象引用 com.example.vujeva.MainActivity $ BlogViewHolder.onClick(MainActivity.java:161)传递给另一活动的Firebase数据库图像字符串

这是我的MainActivity:

public class MainActivity extends AppCompatActivity { 

public static final String TASK_NAME = "com.example.vujeva.tutorshare.title"; 
public static final String TASK_DESC = "com.example.vujeva.tutorshare.desc"; 
public static final String TASK_IMAGE = "com.example.vujeva.tutorshare.image"; 
private RecyclerView mBlogList; 

//private ListView mTaskList; 
private DatabaseReference mDatabase; 
List<Task> artists; 
private FloatingActionButton fab; 
//private ListView lv; 
ArrayAdapter<String> adapter; 
String key; 
CardView card_view; 
ImageView viewy;View inflatedView; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    //mTaskList = (ListView) findViewById(R.id.task_list); 
    mDatabase = FirebaseDatabase.getInstance().getReference().child("Task"); 
    mBlogList = (RecyclerView)findViewById(R.id.task_list); 
    mBlogList.setHasFixedSize(true); 
    mBlogList.setLayoutManager(new LinearLayoutManager(this)); 

    //mTaskList.setHasFixedSize(true); 
    //mTaskList.setLayoutManager(new LinearLayoutManager(this)); 
    artists = new ArrayList<>(); 
    fab = (FloatingActionButton) findViewById(R.id.fab); 

    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(MainActivity.this, AddActivity.class); 
      startActivity(intent); 
     } 
    });   
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    FirebaseRecyclerAdapter<Task, BlogViewHolder> firebaseRecyclerAdapter = 
      new FirebaseRecyclerAdapter<Task, BlogViewHolder>(
        Task.class, 
        R.layout.design_row, 
        BlogViewHolder.class, 
        mDatabase){ 
       protected void populateViewHolder(final BlogViewHolder viewHolder,final Task model, int position) { 
        ImageView post_image = (ImageView) findViewById(R.id.imageViewy); 
        viewHolder.setTitle(model.getTitle()); 
        viewHolder.setImage(getApplicationContext(), model.getImage()); 
        } 
       }; 

    mBlogList.setAdapter(firebaseRecyclerAdapter); 

} 

public static class BlogViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
    View mView; 
    private ArrayList<Task> mPhotos; 
    Task model; 
    ImageView postCommentLayout; 
    public BlogViewHolder(View itemView) { 
     super(itemView); 
     mView= itemView; 
     postCommentLayout = (ImageView) itemView.findViewById(R.id.imageViewy); 
     itemView.setOnClickListener(this); 
    } 
    public void setTitle(String title){ 
     TextView post_title = (TextView)mView.findViewById(R.id.titleText); 
     post_title.setText(title); 
    } 
    public void setImage(Context ctx , String image){ 
     ImageView post_image = (ImageView)mView.findViewById(R.id.imageViewy); 
     // We Need TO pass Context 
     Picasso.with(ctx).load(image).into(post_image); 
     } 

    @Override 
    public void onClick(View itemView) { 

     Context context = itemView.getContext(); 
     Intent showPhotoIntent = new Intent(context, ActionActivity.class); 
     showPhotoIntent.putExtra(TASK_IMAGE, model.getImage().toString()); 
     context.startActivity(showPhotoIntent); 
    } 
} 

这是我ActionActivity:

public class ActionActivity extends MainActivity { 
private CollapsingToolbarLayout collapsingToolbarLayout = null; 
private RecyclerView mImageTask; 
private DatabaseReference mDatabase; 
private ImageView mImage; 
Intent intent; 
public Uri mImageUri = null; 
List<Task> artists; 
String image; 
private Task mPost; 
public static final String TASK_IMAGE = "com.example.vujeva.tutorshare.image"; 
public static final String DATABASE_PATH_UPLOADS = "Tasks"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_action); 
    Intent intent = getIntent(); 

    image = intent.getStringExtra(MainActivity.TASK_IMAGE); 
    mImage = (ImageView) findViewById(R.id.profile_id); 

    Picasso.with(this).load(image).into(mImage); 


} 


private void toolbarTextAppernce() { 
    collapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.collapsedappbar); 
    collapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.expandedappbar); 
} 

回答

0

BlogViewHolder你有一个Task model;你声明,但从来没有初始化。在onClick()中,您可以拨打model.getImage().toString(),但model仍为空。

+0

所以,我应该怎么解决 –

+0

'任务模式= getModelFromSomewhere();'你需要的东西分配给模型,否则它总是空 – Aenadon

0

在保护无效populateViewHolder

protected void populateViewHolder(final BlogViewHolder viewHolder,final Task model, int position) { 
       ImageView post_image = (ImageView) findViewById(R.id.imageViewy); 
       viewHolder.setTitle(model.getTitle()); 
       // viewHolder.setImage(getApplicationContext(), model.getImage()); 

Picasso.with(viewHolder.imageView.getContext()).load(model.getUrl()).into(viewHolder.imageView); //use this 
       } 
      }; 
相关问题