2

I have a button with buttonID "more_button", and after clicking on the button, I want to go to 'Home Activity'. But when I click the button, the app stops and gives me a message:

App has stopped

Here is the code in question:

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

    FloatingActionButton first_button = (FloatingActionButton) findViewById(R.id.first_button);
    FloatingActionButton second_button = (FloatingActionButton) findViewById(R.id.second_button);
    FloatingActionButton third_button = (FloatingActionButton) findViewById(R.id.third_button);
    Button more_button = (Button) findViewById(R.id.more_button);
    second_button.setEnabled(false);

    final ArrayList<String> contacts = getIntent().getStringArrayListExtra("CONTACTS");

    more_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent gotohome = new Intent(FirstActivity.this, HomeActivity.class);
            FirstActivity.this.startActivity(gotohome);

        }
    });

This is the HomeActivity I want to go to...it has various features of camera and audio- If I cannot access the Home Activity and nothing seems to be wrong with my onClickListener, is it because of code in the Home Activity?

import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.media.Image;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.media.MediaPlayer;
import android.media.MediaRecorder;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;


import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;

import static android.Manifest.permission.ACCESS_FINE_LOCATION;
import static android.Manifest.permission.RECORD_AUDIO;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;

import android.support.v4.app.ActivityCompat;
import android.content.pm.PackageManager;
import android.support.v4.content.ContextCompat;

// this is the one FR

public class HomeActivity extends AppCompatActivity {

    private static final int CAMERA_REQUEST = 1888;
    private ImageView imageView;
    Button buttonStart, buttonStop, buttonPlayLastRecordAudio,
            buttonStopPlayingRecording ;
    String AudioSavePathInDevice = null;
    MediaRecorder mediaRecorder ;
    Random random ;
    String RandomAudioFileName = "ABCDEFGHIJKLMNOP";
    public static final int RequestPermissionCode = 1;
    MediaPlayer mediaPlayer ;
    String message;

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

        final ArrayList<String> contacts = getIntent().getStringArrayListExtra("CONTACTSLIST");

        Button location_button = (Button) this.findViewById(R.id.button5);

        /* location_button.setOnClickListener(new View.OnClickListener() {
                                               @Override
                                               public void onClick(View v) {
                                                   sendSMS("CONTACTSLIST", message);
                                               }
                                           }); */
        location_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (checkPermissionText(Manifest.permission.SEND_SMS)) {


                    // TODO GET THIS INTENT RECIEVER TO WORK



                    //String[] contacts = getIntent().getExtras().getStringArray("CONTACTS");

                    //String[] contacts = new String[] {"3345", "5554", "5556"};


                    for(int i = 0; i < contacts.size(); i++) {
                        SmsManager smsManager = SmsManager.getDefault();
                        smsManager.sendTextMessage(contacts.get(i), null, message, null, null);
                    }

                } else {
                    Toast.makeText(HomeActivity.this, "Permission denied", Toast.LENGTH_SHORT).show();
                }
            }
        });

        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, new LocationListener() {
            @Override
            public void onStatusChanged(String s, int i, Bundle bundle) {
            }

            @Override
            public void onProviderEnabled(String s) {
            }

            @Override
            public void onProviderDisabled(String s) {
            }

            @Override
            public void onLocationChanged(final Location location) {
            }

        });



        Location myLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
        double longitude = myLocation.getLongitude();
        double latitude = myLocation.getLatitude();

        message += "This is my location: " + "https://www.google.co.id/maps/@" + latitude + "," + longitude;


        this.imageView = (ImageView)this.findViewById(R.id.imageView1);
        Button photoButton = (Button) this.findViewById(R.id.button1);
        photoButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }
        });
        buttonStart = (Button) findViewById(R.id.button);
        buttonStop = (Button) findViewById(R.id.button2);
        buttonPlayLastRecordAudio = (Button) findViewById(R.id.button3);
        buttonStopPlayingRecording = (Button)findViewById(R.id.button4);

        buttonStop.setEnabled(false);
        buttonPlayLastRecordAudio.setEnabled(false);
        buttonStopPlayingRecording.setEnabled(false);

        random = new Random();

        buttonStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if(checkPermission()) {

                    AudioSavePathInDevice =
                            Environment.getExternalStorageDirectory().getAbsolutePath() + "/" +
                                    CreateRandomAudioFileName(5) + "AudioRecording.3gp";

                    MediaRecorderReady();

                    try {
                        mediaRecorder.prepare();
                        mediaRecorder.start();
                    } catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    buttonStart.setEnabled(false);
                    buttonStop.setEnabled(true);

                    Toast.makeText(HomeActivity.this, "Recording started",
                            Toast.LENGTH_LONG).show();
                } else {
                    requestPermission();
                }

            }
        });

        buttonStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mediaRecorder.stop();
                buttonStop.setEnabled(false);
                buttonPlayLastRecordAudio.setEnabled(true);
                buttonStart.setEnabled(true);
                buttonStopPlayingRecording.setEnabled(false);

                Toast.makeText(HomeActivity.this, "Recording Completed",
                        Toast.LENGTH_LONG).show();
            }
        });

        buttonPlayLastRecordAudio.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) throws IllegalArgumentException,
                    SecurityException, IllegalStateException {

                buttonStop.setEnabled(false);
                buttonStart.setEnabled(false);
                buttonStopPlayingRecording.setEnabled(true);

                mediaPlayer = new MediaPlayer();
                try {
                    mediaPlayer.setDataSource(AudioSavePathInDevice);
                    mediaPlayer.prepare();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                mediaPlayer.start();
                Toast.makeText(HomeActivity.this, "Recording Playing",
                        Toast.LENGTH_LONG).show();
            }
        });

        buttonStopPlayingRecording.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                buttonStop.setEnabled(false);
                buttonStart.setEnabled(true);
                buttonStopPlayingRecording.setEnabled(false);
                buttonPlayLastRecordAudio.setEnabled(true);

                if(mediaPlayer != null){
                    mediaPlayer.stop();
                    mediaPlayer.release();
                    MediaRecorderReady();
                }
            }
        });

    Button button6= (Button) findViewById(R.id.button6);
    button6.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            intent.setData(Uri.parse("http://www.wix.com"));
            startActivity(intent);
        }});
    }

     private void sendSMS(String phoneNumber, String message) {
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, null, null);
    }

    public void MediaRecorderReady(){
        mediaRecorder=new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
        mediaRecorder.setOutputFile(AudioSavePathInDevice);
    }

    public String CreateRandomAudioFileName(int string){
        StringBuilder stringBuilder = new StringBuilder( string );
        int i = 0 ;
        while(i < string ) {
            stringBuilder.append(RandomAudioFileName.
                    charAt(random.nextInt(RandomAudioFileName.length())));

            i++ ;
        }
        return stringBuilder.toString();
    }

    private void requestPermission() {
        ActivityCompat.requestPermissions(HomeActivity.this, new
                String[]{WRITE_EXTERNAL_STORAGE, RECORD_AUDIO,ACCESS_FINE_LOCATION}, RequestPermissionCode);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        switch (requestCode) {
            case RequestPermissionCode:
                if (grantResults.length> 0) {
                    boolean StoragePermission = grantResults[0] ==
                            PackageManager.PERMISSION_GRANTED;
                    boolean RecordPermission = grantResults[1] ==
                            PackageManager.PERMISSION_GRANTED;
                    boolean LocationPermission= grantResults[2] ==
                            PackageManager.PERMISSION_GRANTED;

                    if (StoragePermission && RecordPermission && LocationPermission) {
                        Toast.makeText(HomeActivity.this, "Permission Granted",
                                Toast.LENGTH_LONG).show();
                    } else {
                        Toast.makeText(HomeActivity.this,"Permission Denied",Toast.LENGTH_LONG).show();
                    }
                }
                break;
        }
    }

    public boolean checkPermission() {
        int result = ContextCompat.checkSelfPermission(getApplicationContext(),
                WRITE_EXTERNAL_STORAGE);
        int result1 = ContextCompat.checkSelfPermission(getApplicationContext(),
                RECORD_AUDIO);
        int result2 = ContextCompat.checkSelfPermission(getApplicationContext(),
                ACCESS_FINE_LOCATION);
        return result == PackageManager.PERMISSION_GRANTED &&
                result1 == PackageManager.PERMISSION_GRANTED &&
                result2 == PackageManager.PERMISSION_GRANTED;

    }

    private boolean checkPermissionText(String permission) {
        int checkPermission = ContextCompat.checkSelfPermission(this, permission);
        return (checkPermission == PackageManager.PERMISSION_GRANTED);
    }


    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            imageView.setImageBitmap(photo);
        }
    }
}

Lastly, this is the xml for Home:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

    <Button
        android:id="@+id/button1"
        android:layout_width="100dp"
        android:layout_height="90dp"
        android:text="Take Photo"
        app:srcCompat="@android:drawable/ic_menu_camera"
        android:layout_above="@+id/button3"
        android:layout_toRightOf="@+id/imageView1"
        android:layout_toEndOf="@+id/imageView1"></Button>

    <ImageView android:id="@+id/imageView1"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"></ImageView>
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        />

    <Button
        android:id="@+id/button"
        android:layout_width="90dp"
        android:layout_height="48dp"
        android:layout_above="@+id/button3"
        android:layout_marginBottom="17dp"
        android:layout_toEndOf="@+id/imageView"
        android:layout_toRightOf="@+id/imageView"
        android:tint="@android:color/holo_red_dark"
        android:drawableTop="@android:drawable/ic_btn_speak_now" />

    <Button
        android:id="@+id/button2"
        android:layout_width="90dp"
        android:layout_height="48dp"
        android:text="STOP"
        android:layout_alignTop="@+id/button"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <Button
        android:id="@+id/button3"
        android:layout_width="90dp"
        android:layout_height="48dp"
        android:layout_alignLeft="@+id/button"
        android:layout_alignParentBottom="true"
        android:layout_alignStart="@+id/button"
        android:layout_alignTop="@+id/button4"
        android:drawableTop="@android:drawable/ic_media_play"
        android:stateListAnimator="@null" />

    <Button
        android:id="@+id/button4"
        android:layout_width="90dp"
        android:layout_height="48dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"

        android:drawableTop="@android:drawable/ic_media_pause" />

    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Send my Location"
        android:layout_alignBaseline="@+id/button6"
        android:layout_alignBottom="@+id/button6"
        android:layout_toRightOf="@+id/imageView1"
        android:layout_toEndOf="@+id/imageView1" />

    <Button
        android:id="@+id/button6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/imageView"
        android:layout_marginEnd="27dp"
        android:layout_marginRight="27dp"
        android:layout_marginTop="19dp"
        android:text="resources" />


</RelativeLayout>

And (full) crash log:

04-10 20:33:31.533 941-941/com.example.android.vigilant E/AndroidRuntime: FATAL EXCEPTION: main
                                                                          Process: com.example.android.vigilant, PID: 941
                                                                          java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.vigilant/com.example.android.vigilant.HomeActivity}: java.lang.NullPointerException
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
                                                                              at android.app.ActivityThread.access$800(ActivityThread.java:135)
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                              at android.os.Looper.loop(Looper.java:136)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5017)
                                                                              at java.lang.reflect.Method.invokeNative(Native Method)
                                                                              at java.lang.reflect.Method.invoke(Method.java:515)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                                                                              at dalvik.system.NativeStart.main(Native Method)
                                                                           Caused by: java.lang.NullPointerException
                                                                              at com.example.android.vigilant.HomeActivity.onCreate(HomeActivity.java:134)
                                                                              at android.app.Activity.performCreate(Activity.java:5231)
                                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
                                                                              at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                                                                              at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                              at android.os.Looper.loop(Looper.java:136) 
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5017) 
                                                                              at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                              at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                                                                              at dalvik.system.NativeStart.main(Native Method) 

How should I implement additional changes/ what changes specific to my code should be added and/or removed so that the button will continue to the next activity?

Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197

4 Answers4

1

Check your code:

You have

setContentView(R.layout.activity_home);

You need to change this

 setContentView(R.layout.activity_first);

You have

  Button location_button = (Button) this.findViewById(R.id.button5);

You need to change this

 Button location_button = (Button)findViewById(R.id.button5);
  • Check your xml code i think button id is not correct in java file
  • And make sure your activity is define in manifest
  • Problem in your xml code not your java code please match your all id's
Android Geek
  • 8,956
  • 2
  • 21
  • 35
0

I think in xml R.layout.activity_first you have not given id to the button or it is not 'more_button' post that xml and your query can be solved

Gowthaman M
  • 8,057
  • 8
  • 35
  • 54
0

Your requestPermission() is in buttonStart's onclick and your are trying to get location in oncreate() method , enable the permissions before asking for location

0

Where did you pass bundle when starting new activity.

Change this line

final ArrayList<String> contacts = getIntent().getStringArrayListExtra("CONTACTSLIST");

to this

    ArrayList<String> contacts = new ArrayList<>();
    if (getIntent()!=null && getIntent().hasExtra("CONTACTSLIST"))
        contacts = getIntent().getStringArrayListExtra("CONTACTSLIST");

Also put some list when starting activity , which you want get in next activity.

let me know if this resolves issue.

Khemraj Sharma
  • 57,232
  • 27
  • 203
  • 212