0

私のアプリケーションでは、1つの画面から他の画面に5つの編集テキスト値を渡す必要があります。それを入れて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 ;
            } 

これは私の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
4

4 に答える 4

1

インテントをよく読む必要があると思います。これを使用する前に、インテントを使用してAndroidアプリケーションの一部のコンポーネントをアクティブ化する必要があります。コンポーネントには、アクティビティ、サービス、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がアクティビティである場合は、onCreateなどのアクティビティのライフサイクルメソッドの1つでupdateSpinTitleを呼び出す必要があります。

于 2012-07-18T04:44:08.927 に答える
0

Screen 1 i.e First Activityよくわかりませんが、呼び出しているのと同じアクティビティで値を設定していることがコードからわかりますgetIntent()。もちろん、それはnullになります。

同じでupdateSpinTitle()設定後に呼び出されるようにIntentActivity

updateSpinTitle()がYESと思う同じクラスにいる場合。

その後、単に行います。

{
    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 に答える
0

それ以外の:

intent.getStringExtra("grp1val");

書きます:

intent.getExtras().getString("grp1val");
于 2012-07-18T04:46:38.863 に答える