0

在我的应用程序中,我必须将 5 个编辑文本值从 1 个屏幕传递到其他屏幕。我把它放进去putextragetextra但是我得到了null pointer exception。我不知道我做错了什么。帮助我。

这是我的代码:

过关画面:

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();  

获取画面:

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 ;
            } 

这是我的日志:

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
4

4 回答 4

1

我认为你需要通读Intents,在使用它之前,我们需要使用intents来激活android应用程序中的一些组件,组件包括Activity、Service、BroadcastReceiver。我们为意图添加了一些额外的值,因此目标组件可以选择数据。要从不需要使用意图的任何活动中保存和获取数据,我们可以简单地调用数据库助手类的任何方法,例如,您可以将此方法编写为:

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

并将方法 updateSpinTitle 更改为以下内容:

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 ;
            } 

如果它的 DBAdapter 是一个活动,那么您应该在活动的生命周期方法之一中调用 updateSpinTitle,例如 onCreate。

于 2012-07-18T04:44:08.927 回答
0

代替:

intent.getStringExtra("grp1val");

写:

intent.getExtras().getString("grp1val");
于 2012-07-18T04:46:38.863 回答
0

我不确定,但它Screen 1 i.e First Activity与您正在调用的同一 Activity中设置值的代码接缝getIntent()。那当然是空的。

updateSpinTitle()设置相同后调用IntentActivity

如果updateSpinTitle()在同一个班级,我猜是的。

然后简单地做..

{
    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 ;
            } 

然后像这样打电话..

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

                   db.updateSpinTitle();
                    startActivity(spin);

                    finish();  
于 2012-07-18T04:39:09.030 回答
0

如果您遇到问题的意图和 put/getExtras,我认为这就是您错过的。

代替:

 intent.getStringExtra("grp1val")

利用:

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

并尝试在 setContentView 之后的 onCreate 中获取您的意图

intent=getIntent();
于 2012-07-18T04:40:29.163 回答