0

In my application I have to pass 5 edit text values from 1 screen to other.I put that in putextra and getextra,But I am getting null pointer exception.I don't know what I did wrong.Help me.

Here is my code:

Passing screen:

long id=0;
                    db.open();
//                  id=db.insertSpinTitle(group1.getText().toString(), group2.getText().toString(), group3.getText().toString(), group4.getText().toString(), group5.getText().toString());                 
                    Intent spin=new Intent(getApplicationContext(),DBadapter.class);
                    spin.putExtra("grp1val", group1.getText().toString());
                    spin.putExtra("grp2val", group2.getText().toString());
                    spin.putExtra("grp3val", group3.getText().toString());
                    spin.putExtra("grp4val", group4.getText().toString());
                    spin.putExtra("grp5val", group5.getText().toString());
//                  setResult(1,spin); 
                   db.updateSpinTitle();
                    startActivity(spin);

                    finish();  

Getting screen:

public long updateSpinTitle() 
{
    System.out.println("Inside update");
    ContentValues initialValues = new ContentValues();
    for(int i=1;i<=6;i++)
    {
        System.out.println("inside for");       
        Intent intent=getIntent();      
        System.out.println("subbu=");
        if(i==1) initialValues.put(KEY_SPIN, intent.getStringExtra("grp1val")); 
        if(i==2) initialValues.put(KEY_SPIN, intent.getStringExtra("grp2val")); 
        if(i==3) initialValues.put(KEY_SPIN, intent.getStringExtra("grp3val"));
        if(i==4) initialValues.put(KEY_SPIN, intent.getStringExtra("grp4val")); 
        if(i==5) initialValues.put(KEY_SPIN, intent.getStringExtra("grp5val")); 
        if(i==6) initialValues.put(KEY_SPIN, "Edit"); 

        db.update(DATABASE_TABLESPIN, initialValues, KEY_ROWID + "=" + i, null);
        }
    return 0 ;
            } 

This is my logcat:

07-18 09:55:02.324: D/AndroidRuntime(435): Shutting down VM
07-18 09:55:02.324: W/dalvikvm(435): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
07-18 09:55:02.324: E/AndroidRuntime(435): Uncaught handler: thread main exiting due to uncaught exception
07-18 09:55:02.344: E/AndroidRuntime(435): java.lang.NullPointerException
07-18 09:55:02.344: E/AndroidRuntime(435):  at com.budget1.DBadapter.updateSpinTitle(DBadapter.java:128)
07-18 09:55:02.344: E/AndroidRuntime(435):  at com.budget1.SpinnerEdit$1.onClick(SpinnerEdit.java:58)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.view.View.performClick(View.java:2364)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.view.View.onTouchEvent(View.java:4179)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.widget.TextView.onTouchEvent(TextView.java:6541)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.view.View.dispatchTouchEvent(View.java:3709)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
07-18 09:55:02.344: E/AndroidRuntime(435):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
07-18 09:55:02.344: E/AndroidRuntime(435):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
07-18 09:55:02.344: E/AndroidRuntime(435):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.os.Looper.loop(Looper.java:123)
07-18 09:55:02.344: E/AndroidRuntime(435):  at android.app.ActivityThread.main(ActivityThread.java:4363)
07-18 09:55:02.344: E/AndroidRuntime(435):  at java.lang.reflect.Method.invokeNative(Native Method)
07-18 09:55:02.344: E/AndroidRuntime(435):  at java.lang.reflect.Method.invoke(Method.java:521)
07-18 09:55:02.344: E/AndroidRuntime(435):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-18 09:55:02.344: E/AndroidRuntime(435):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-18 09:55:02.344: E/AndroidRuntime(435):  at dalvik.system.NativeStart.main(Native Method)
07-18 09:55:02.366: I/dalvikvm(435): threadid=7: reacting to signal 3
07-18 09:55:02.366: E/dalvikvm(435): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
hasanghaforian
  • 13,858
  • 11
  • 76
  • 167
prakash .k
  • 635
  • 2
  • 12
  • 24

4 Answers4

1

I think you need to read Intents throughly, before using this, we need to use intents to activate some component in an android application, components include, Activity, Service, BroadcastReceiver. We put some extra values to intent, so target component can pick the data. To save and fetch data from any activity dont require intents to use, we can simply call any method of database helper class, for example you can write this method as:

 db.open();
 db.updateSpinTitle(group1.getText().toString(), group2.getText().toString(),
                         group3.getText().toString(),  group4.getText().toString(),
                         group5.getText().toString());

and change method updateSpinTitle to following:

public long updateSpinTitle(String grp1, String grp2, String grp3, String grp4, String grp5) 
{
    System.out.println("Inside update");
    ContentValues initialValues = new ContentValues();
    for(int i=1;i<=6;i++)
    {
        System.out.println("inside for");       
        if(i==1) initialValues.put(KEY_SPIN, grp1); 
        if(i==2) initialValues.put(KEY_SPIN, grp2); 
        if(i==3) initialValues.put(KEY_SPIN, grp3);
        if(i==4) initialValues.put(KEY_SPIN, grp4); 
        if(i==5) initialValues.put(KEY_SPIN, grp5); 
        if(i==6) initialValues.put(KEY_SPIN, "Edit"); 

        db.update(DATABASE_TABLESPIN, initialValues, KEY_ROWID + "=" + i, null);
        }
    return 0 ;
            } 

And if its DBAdapter is an activity then you should invoke updateSpinTitle in one of lifecycle method of the activity, like onCreate.

jeet
  • 29,001
  • 6
  • 52
  • 53
0

I am not sure but It seams from the code that you are setting the values in Screen 1 i.e First Activity and in same Activity you are calling getIntent(). That will be null of course.

as updateSpinTitle() is called after settings the Intent in same Activity

If updateSpinTitle() is in same class which I guess YES.

then simply do..

{
    System.out.println("Inside update");
    ContentValues initialValues = new ContentValues();
    for(int i=1;i<=6;i++)
    {
        System.out.println("inside for");       
        if(i==1) initialValues.put(KEY_SPIN, group1.getText().toString()); 
        if(i==2) initialValues.put(KEY_SPIN, group2.getText().toString(),); 
        if(i==3) initialValues.put(KEY_SPIN, group3.getText().toString(),);
        if(i==4) initialValues.put(KEY_SPIN, group4.getText().toString(),); 
        if(i==5) initialValues.put(KEY_SPIN, group5.getText().toString(),); 
        if(i==6) initialValues.put(KEY_SPIN, "Edit"); 

        db.update(DATABASE_TABLESPIN, initialValues, KEY_ROWID + "=" + i, null);
        }
    return 0 ;
            } 

and

then call like in this way..

   db.open();
//                  id=db.insertSpinTitle();                 
                    Intent spin=new Intent(getApplicationContext(),DBadapter.class);

                   db.updateSpinTitle();
                    startActivity(spin);

                    finish();  
Mohsin Naeem
  • 12,542
  • 3
  • 39
  • 53
0

If it is with the intents and put/getExtras you are experiencing problems, I think this is what you have missed.

instead of:

 intent.getStringExtra("grp1val")

use:

intent.getExtras().getStringExtra("grp1val")

And try to get your intent in the onCreate after setContentView

intent=getIntent();
pixelscreen
  • 1,945
  • 2
  • 18
  • 40
0

Instead of:

intent.getStringExtra("grp1val");

write:

intent.getExtras().getString("grp1val");
AkashG
  • 7,868
  • 3
  • 28
  • 43