0

mainActivity.java

public class MainActivity extends AppCompatActivity {

    ListView listView;
    ListViewAdaptor adapter;
    TextView txtname1,txtrank1;
    RelativeLayout relativeLayout;
    Context context;
    ArrayList<String> name;
    ArrayList<Integer> rank;
    int highestRank = 39;

    public MainActivity() {
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = findViewById(R.id.listview);
        relativeLayout = (RelativeLayout) findViewById(R.id.rlFloter);
        txtname1 =  findViewById(R.id.txtName);
        txtrank1 =  findViewById(R.id.txtRank);

        name = new ArrayList<>();
        rank = new ArrayList<>();
        for(int i=1 ; i<40 ; i++){
            name.add("Winit Employer"+i);
            rank.add(i); }
        txtname1.setText("Winit Employer39");
        txtrank1.setText("39");
        adapter = new ListViewAdaptor(this,name,rank);
        listView.setAdapter(adapter);
    }

    public void visible() {
        txtname1.setVisibility(View.VISIBLE);
        txtrank1.setVisibility(View.VISIBLE);
    }

    public void gone() {
        txtname1.setVisibility(View.GONE);
        txtrank1.setVisibility(View.GONE);
    }

    public void toast() {
        Toast.makeText(context,"Toast",Toast.LENGTH_LONG).show();
   }
/////////////

ListView_data.java

public class ListViewAdaptor extends BaseAdapter {

    private final Context context;
    ArrayList<String> name;
    ArrayList<Integer> rank;
    Integer highestRank = 39;
    MainActivity ma = (MainActivity) getActivity();

    public ListViewAdaptor(Context context,ArrayList<String> name, ArrayList<Integer> rank) {
        this.name = name;
        this.rank = rank;
        this.context=context;
    }

    @Override
    public int getCount() {
        return name.size();
    }

    @Override
    public Object getItem(int i) {
        return i;
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.listview_data, null);

        TextView txtname = (TextView) rowView.findViewById(R.id.txtName);
        TextView txtRank = (TextView) rowView.findViewById(R.id.txtRank);

        txtname.setText(name.get(i));
        txtRank.setText(rank.get(i).toString());
     main.visible();//hear it shows error

        if(highestRank == rank.get(i)){

         main.gone();
            main.toast();

        }
        return rowView;

    }

}

Logcat

AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.akash.listview_frame, PID: 7445 
java.lang.NullPointerException 
   at android.widget.Toast.<init>(Toast.java:93)
   at android.widget.Toast.makeText(Toast.java:241)
   at com.example.akash.listview_frame.MainActivity.toast(MainActivity.java:66)
   at com.example.akash.listview_frame.ListViewAdaptor.getView(ListViewAdaptor.java:60)
Phantômaxx
  • 37,901
  • 21
  • 84
  • 115

2 Answers2

1

variable context is not initialized.

remove the variable and use this instead inside activity toast method

     Toast.makeText(this,"Toast",Toast.LENGTH_LONG).show();
Samuel Robert
  • 10,106
  • 7
  • 39
  • 60
1

There are two solution, one is as suggested by @SamuelRobert, another is add

context = MainActivity.this 

inside your MainActivity's onCreate method.

Rajen Raiyarela
  • 5,526
  • 4
  • 21
  • 41
  • 2
    context variable is redundant. Since `this` better conveys the context inside activity. and less code! that's always good – Samuel Robert Dec 31 '18 at 12:05