0

I need to set 2 condition in the if-statement (if this or this), the first part take an item from a listview, and the other if-part get the value from the first activity if it's true then do the condition need. See the 2 codes below may will explain it better.

putExtra code

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    TextView thisTextView = (TextView)view.findViewById(R.id.listview_item_title);
    String text = (String)thisTextView.getText();

    if (text.equals("Category")) {

        Intent i = new Intent(Search.this,MainActivity.class);
        i.putExtra("sendData", 1);
        startActivity(i);           
    }
}

getExtra Code

public class MainActivity extends Activity implements OnItemClickListener{

//private boolean mainSub,manuSub = false;
private int mainSub=0;
ListView lv;
String [] list;
int mine;

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

    lv = (ListView)findViewById(R.id.listView);
    list = getResources().getStringArray(R.array.main);

    lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list));
    lv.setOnItemClickListener(this);

    Intent myIntent = getIntent();
    mine = myIntent.getExtras().getInt("sendData");
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {

    Intent i = new Intent(MainActivity.this, SwipeActivity.class);

    if (lv.getItemAtPosition(position).toString().equalsIgnoreCase("Search")){
        i = new Intent(MainActivity.this, Search.class);
        startActivity(i);
    } 
    else if (lv.getItemAtPosition(position).toString().equalsIgnoreCase("Category")  || mine == 1) {
        lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,getResources().getStringArray(R.array.Category)));
        mainSub = 1;
 }

I gives the to parameters of putExtra(name,value) as name=sendData value=1 . then when I'm trying to get the Intent then the program gives an Exception and not started. I know that the error is in in the getExtras line --> mine = myIntent.getExtras().getInt("sendData"); but actually I don't know why it seems to be an error. because I think that every think is fine with coding!.

LogCat

05-02 18:06:05.218: D/SecWifiDisplayUtil(11595): Metadata value : none
05-02 18:06:05.293: D/PhoneWindow(11595): *FMB* installDecor mIsFloating : false
05-02 18:06:05.293: D/PhoneWindow(11595): *FMB* installDecor flags : 8454400
05-02 18:06:05.298: D/AbsListView(11595): Get MotionRecognitionManager
05-02 18:06:05.303: E/MotionRecognitionManager(11595): mSContextService = android.hardware.scontext.ISContextService$Stub$Proxy@8bebba7
05-02 18:06:05.303: E/MotionRecognitionManager(11595): motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@208cf854
05-02 18:06:05.303: E/MotionRecognitionManager(11595): motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@208cf854
05-02 18:06:05.308: D/AndroidRuntime(11595): Shutting down VM
05-02 18:06:05.308: E/AndroidRuntime(11595): FATAL EXCEPTION: main
05-02 18:06:05.308: E/AndroidRuntime(11595): Process: com.example.shaymatest, PID: 11595
05-02 18:06:05.308: E/AndroidRuntime(11595): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.shaymatest/com.example.shaymatest.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.os.Bundle.getInt(java.lang.String)' on a null object reference
05-02 18:06:05.308: E/AndroidRuntime(11595):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3149)
05-02 18:06:05.308: E/AndroidRuntime(11595):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3248)
05-02 18:06:05.308: E/AndroidRuntime(11595):    at android.app.ActivityThread.access$1000(ActivityThread.java:197)
05-02 18:06:05.308: E/AndroidRuntime(11595):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1681)
05-02 18:06:05.308: E/AndroidRuntime(11595):    at android.os.Handler.dispatchMessage(Handler.java:102)
05-02 18:06:05.308: E/AndroidRuntime(11595):    at android.os.Looper.loop(Looper.java:145)
05-02 18:06:05.308: E/AndroidRuntime(11595):    at android.app.ActivityThread.main(ActivityThread.java:6872)
05-02 18:06:05.308: E/AndroidRuntime(11595):    at java.lang.reflect.Method.invoke(Native Method)
05-02 18:06:05.308: E/AndroidRuntime(11595):    at java.lang.reflect.Method.invoke(Method.java:372)
05-02 18:06:05.308: E/AndroidRuntime(11595):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
05-02 18:06:05.308: E/AndroidRuntime(11595):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
05-02 18:06:05.308: E/AndroidRuntime(11595): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.os.Bundle.getInt(java.lang.String)' on a null object reference
05-02 18:06:05.308: E/AndroidRuntime(11595):    at com.example.shaymatest.MainActivity.onCreate(MainActivity.java:35)
05-02 18:06:05.308: E/AndroidRuntime(11595):    at android.app.Activity.performCreate(Activity.java:6550)
05-02 18:06:05.308: E/AndroidRuntime(11595):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)
05-02 18:06:05.308: E/AndroidRuntime(11595):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3102)
05-02 18:06:05.308: E/AndroidRuntime(11595):    ... 10 more
05-02 18:06:05.368: I/Process(11595): Sending signal. PID: 11595 SIG: 9
Ben-J
  • 1,084
  • 8
  • 24
Doglas
  • 47
  • 1
  • 8

3 Answers3

1

Your code is going to crash when there is no Intent for MainActivity that has extras (such as when you first start the app).

Therefore, you need to check if there are extras to get.

Bundle extras = getIntent().getExtras();
if (extras != null) {
    mine = extras.getInt("sendData");
}

Alternatively, you could use getIntent().getIntExtra("sendData", -1) where -1 is some default value.

OneCricketeer
  • 179,855
  • 19
  • 132
  • 245
  • How can I use `getIntent().getIntExtra("sendData", -1)` ? and what's the difference? – Doglas May 02 '16 at 16:26
  • Instead of a null check, you can use that. The difference is that you can provide a default value instead of having your app crash. – OneCricketeer May 02 '16 at 16:28
0

Instead of using getExtras().getInt use getIntExtra

AgileNinja
  • 914
  • 1
  • 7
  • 20
0

There are a few ways that an activity can be started.

1) started by a launcher (you can verify this in your manifest file)

2) started by an intent.

when it is started by a launcher, then mIntent is null. trying to retrieve extras from it will result in NullPointerException.

My assumption is that MainActivity is also your launcher activity. if so, then you should check for mIntent == null before using it.

Angel Koh
  • 12,479
  • 7
  • 64
  • 91