5

単純に使用する文字列の配列を渡すために、URIの配列を別のアクティビティに渡す必要があります

String[] images=getImagesPathString();

    Bundle b = new Bundle();
    b.putStringArray("images", images);

しかし、URIの配列を使用する

 Uri[] imagesUri=getImagesUri();

バンドルにメソッド「putUri(Urix)」がないため、これは機能しません

どうすればこの問題を解決できますか?

4

5 に答える 5

6

私が知っていることから、プレーン配列をバンドルに入れることはできません。ただし、URIをArrayListに入れてから、Bundle.putParcelableArrayList()を呼び出すことができます。

例:

 ArrayList<Uri> uris = new ArrayList<Uri>();
 // fill uris
 bundle.putParcelableArrayList(KEY_URIS, uris);

後で:

    ArrayList<Parcelable> uris =
            bundle.getParcelableArrayList(KEY_URIS);
    for (Parcelable p : uris) {
        Uri uri = (Uri) p;
    }
于 2012-10-17T21:54:10.523 に答える
4

パーセラブルインターフェイスを調べて、インテントで物事を渡す方法を確認する必要があります

http://developer.android.com/intl/es/reference/android/os/Parcelable.html

たぶん、そのインターフェイスを実装するParcelableUriクラスを実装できます。

このように(テストされていません!!):

public class ParcelableUri implements Parcelable {

private Uri[] uris;

public ParcelableUri(Parcel in) {
    Uri.Builder builder = new Uri.Builder();

    int lenght = in.readInt();
    for(int i=0; i<=lenght; i++){           
        uris[i]= builder.path(in.readString()).build();
    }
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(uris.length);
    for(int i=0; i<=uris.length; i++){
        dest.writeString(uris[i].toString());
    }
}

public static final Parcelable.Creator<ParcelableUri> CREATOR = new Parcelable.Creator<ParcelableUri>() {

    public ParcelableUri createFromParcel(Parcel in) {
        return new ParcelableUri(in);
    }

    public ParcelableUri[] newArray(int size) {
        return new ParcelableUri[size];
    }
};
于 2012-10-17T21:45:32.143 に答える
3

ウリは小包ではないですか?パーセル可能な要素(Uri)の配列を作成して、バンドルに入れることができます。

于 2012-10-17T21:46:11.440 に答える
0

JSONObjectを使用して、任意のオブジェクトをラップし、すばやく文字列化することができます。文字列からJSONに戻るのは本当に簡単です

于 2012-10-17T21:54:28.943 に答える
0

あなたはこれを行うことができます...

private Uri[] getUris(int requestCode, Intent data) {

        Uri[] uris;

    ClipData clipData = null;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
        clipData = data.getClipData();
    }
    if(clipData != null) {
        uris = new Uri[clipData.getItemCount()];
        for(int i=0;i<clipData.getItemCount();i++) {
            ClipData.Item videoItem = clipData.getItemAt(i);
            Uri videoURI = videoItem.getUri();
            uris[i] = videoURI;
        }
    }
    else {
        uris = new Uri[0];
        Uri videoURI = data.getData();
        uris[0] = videoURI;
    }

    return uris;
    }
于 2021-02-26T09:49:00.453 に答える