-5

The required output is that in 1st activity, there's a title, imageview and 3 buttons. When the image is clicked, new activity starts where same details are shown but this time only that post is shown(later along with comments). SO I need to pass the title and image details using bundle but my app crashes.

CustomAdapter.java code:

package com.example.swapsha96.myapplication;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

class CustomAdapter extends ArrayAdapter<String> {

private final String[] itemname;
private final Integer[] imgid;
private final Context context;

public CustomAdapter(Context context, String[] resource, Integer[] imgid) {
    super(context, R.layout.postcard, resource);
    this.itemname=resource;
    this.imgid=imgid;
    this.context = context;
}

@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
    LayoutInflater layoutInflater = LayoutInflater.from(getContext());
    View view = layoutInflater.inflate(R.layout.postcard, parent, false);

    TextView title = (TextView)view.findViewById(R.id.title);
    ImageView post = (ImageView)view.findViewById(R.id.post);
    Button plus1 = (Button)view.findViewById(R.id.plus1);
    Button share = (Button)view.findViewById(R.id.share);
    Button comment = (Button)view.findViewById(R.id.comment);

    title.setText(itemname[position]);
    post.setImageResource(imgid[position]);
    post.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(parent.getContext(), Post.class);
            Bundle extras = new Bundle();
            extras.putString("title",itemname[position]);
            extras.putInt("post", imgid[position]);
            intent.putExtras(extras);
            parent.getContext().startActivity(intent);
        }
    });

    return view;
}
}

Post.java code: (the activity class which is going to open next on image click)

package com.example.swapsha96.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.TextView;

public class Post extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_post);

    Intent intent = getIntent();
    Bundle extras = intent.getExtras();
    String titleValue = extras.getString("title");
    Integer postValue = extras.getInt("post");

    TextView title = (TextView)findViewById(R.id.title);
    ImageView post = (ImageView)findViewById(R.id.post);
    title.setText(titleValue);
    post.setImageResource(postValue);
}

}

activity_post.xml post:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:orientation="vertical"
  android:id="@+id/postcard"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  tools:context="com.example.swapsha96.myapplication.Post"
  android:background="#FFFFFF"
  android:layout_margin="2dp"
  android:adjustViewBounds="true">

   <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/myCoordinator"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:fitsSystemWindows="true">

     <android.support.v4.widget.NestedScrollView
        android:id="@+id/myScrollingContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none"
        android:fillViewport="true">

        <ListView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/listView"
            android:layout_gravity="center_horizontal"
            android:divider="@android:color/transparent"
            android:dividerHeight="2dp" />

    </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>

It throws the error that title.setText(titleValue); in 2nd code is a null object reference and hence unable to start the activity.

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.swapsha96.myapplication/com.example.swapsha96.myapplication.Post}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
Sanoop Surendran
  • 3,484
  • 4
  • 28
  • 49

1 Answers1

0

You haven't declared any TextView with id title in you layout. So you are unable to find that textview and hence title object is null.

Add TextView to your layout like this:

<TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" "/>
Rohit Arya
  • 6,751
  • 1
  • 26
  • 40