2

オブジェクトをあるアクティビティから別のアクティビティに転送したい。

私の最初のクラスでは、次のものを入れました

意図意図tt ;

インテント Intentttt.putExtra("user_searchh", cur.toString());

ここで、cur は Cursor のオブジェクトです。2級に乗り換えたい。

私の2番目のクラスでは、次のようにしました

カーソル c = (カーソル) getIntent().getSerializableExtra("user_search");

上記のコードなしで両方のクラスを実行しようとしましたが、正しく動作します。

しかし、上記のコードを配置すると、強制終了エラーが表示されます。

DDMS では ... NulpointerException ... DirectCursorDriver .... などのエラーが発生します。

Android であるアクティビティから別のアクティビティにオブジェクトを渡す方法からteke リファレンスを取得 します

50票を持っています。

可能であれば助けてください。

ありがとう ...

4

5 に答える 5

1

それは Serializable がどのように機能するかではありません。基本的なレベルでオブジェクトが文字列に変換されることは正しいですが、単に obj.toString(); を呼び出すよりもはるかに複雑です。

Intent を介して渡すことができるオブジェクトは、Serializable インターフェイスを実装するオブジェクトだけです。

したがって、Cursor に渡す必要がある情報がある場合は、それを取り出して、ある種の Serializable オブジェクトにラップします。

于 2014-03-05T04:59:39.597 に答える
1

わかった ....

まず第一に、オブジェクトを文字列に変換すると..オブジェクトにキャストすることはできません..

第二に、あるアクティビティから別のアクティビティにオブジェクトを転送するのではなく、あるアクティビティから 2 番目のアクティビティに文字列を転送し、2 番目のアクティビティで内容を計算する方が望ましいです ...

あるアクティビティから別のアクティビティに文字列を転送するときに、次の2つの間違いを犯しました...

1)私が犯している最初の間違いは....

私は2つのインテントオブジェクトを使用しています..例

Intent i = new Intent(user_search2.this,rest_name_share.class);

     Intent i1= new Intent();
    i1.putExtra("restaurant_email", email_of_restaurant);

     startActivity(i); 
             startActivity(i1);

むしろあなたは以下のように書くべきです

Intent i = new Intent(user_search2.this,rest_name_share.class);

    i.putExtra("restaurant_email", email_of_restaurant);  // here email_of_restaurant is a String object ..
    // you can aslo put more  than one strings...
     startActivity(i); 

2) 2 番目の間違いは、クラス レベルで getStringExtra() を呼び出すことです。

onCreate() メソッドで呼び出す必要があります

onCreate() で呼び出されるものは

インテント インテント = getIntent();

String email_of_restaurant = intent.getStringExtra("restaurant_detail");

ありがとうございます 、、....

于 2012-04-16T12:57:43.200 に答える
0

ああ、神様。ここはかなりの被災地ですね。

OPの問題は単純です。彼は文字列をインテントに入れてから、シリアライズ可能を取得しようとしています。String は確かにシリアライズ可能ですが、Cursor へのキャストは機能しません。

ただ正しいだけでなく、役に立つようにしようとすると、一般的に、これはうまくいかないことを指摘できます。カーソル (データベースへの接続を表すオブジェクト) を分割またはシリアル化しようとすることは、ほとんど不可能です。少しの間、カーソルのデータ全体をインテントにマーシャリングすることの意味を考えてみてください。しかし、実際には、ある種の Binder マジックを使用して、Androidクロスプロセス カーソルをサポートしているため、「以外はすべて」と言いました (リンクを含めますが、SO は禁止しています)。しかし、いいえ: Cursor を Intent に入れることはできません。まったく。これまで。

最後に、しかし、約3回答前に、誰かが狂気を止めて、「WTF、Dude ??? 何をしようとしているのか??」と尋ねたはずです。OPがやろうとしていることを達成するためのいくつかの方法を次に示します。

  • 必要なデータをモデル オブジェクト ツリーにプルし、それへの参照を渡します。
  • クエリを再実行します (上記で提案されましたが、裏付けとなる理由はありません)。
  • カーソルをグローバルに置き、両方のアクティビティから参照します。
于 2014-03-05T06:06:21.233 に答える
-1

このコードに文字列オブジェクトを入れました

以下のコードを試してみてください。

  Intent intentttt.putExtra("user_searchh", cur.toString()); 

 String str=getIntent().getStringExtra("user_searchh");

Pass Cursorの場合、次のような1つのクラスを作成する必要があります。

public class MyCursor implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;
Cursor mCursor;

public void setCursor(Cursor paramCursor){
    mCursor=paramCursor;
}

public Cursor getCursor(){
    return this.mCursor;
  }
}

オブジェクトを PutExtra に入れる前に、以下のコードで初期化します

   MyCursor mObject=new MyCursor();
    //You can set your Cursor in Below code
   mObject.setCursor(mCursor);
   mIntent.putExtra("mCursor",mObject );

他のアクティビティでは、以下のコードで Cursor を取得できます。

   MyCursor mGetCursor;
  mGetCursor=(MyCursor) getIntent().getSerializableExtra("mCursor");
    if(mGetCursor!=null){
        mGetCursor.getCursor();
    }
于 2012-04-14T05:49:43.287 に答える
-1
//For passing :
intent.putExtra("MyKey", YourObj);  // From First Activity

// to retrieve object in second Activity
Object obj = getIntent().getSerializableExtra("MyKey"); //In Second Activity

これで、オブジェクトを変換できます。これがお役に立てば幸いです。

于 2012-04-14T05:54:56.090 に答える