ストレージアクセスフレームワークを使用してイメージを選択し、それらをサーバーにアップロードしようとしています。
私が遭遇している問題は、ファイルを選択した後に重複を含む結果が得られることです。
フォルダに279枚の写真があります。
ACTION_OPEN_DOCUMENT
は279件の結果を返しますが、その中には重複しているものがありますので、時々私は275回、時には268回などがあります。 重複はランダムに表示されるため、特定のファイルではありません。ここでストレージアクセスフレームワークでACTION_OPEN_DOCUMENTが重複した結果を返します
はコードです:
int PICKER_CODE = 123;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(Intent.createChooser(intent,
"Select images"), PICKER_CODE);
}
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK) {
Toast.makeText(this, "Nothing was chosen", Toast.LENGTH_LONG).show();
return;
}
if (requestCode == PICKER_CODE) {
ClipData clipData = data.getClipData();
if (clipData != null) {
Set<Uri> uniqueUris = new HashSet<>();
for (int i = 0; i < clipData.getItemCount(); i++) {
Uri photoUri = clipData.getItemAt(i).getUri();
uniqueUris.add(photoUri);
Log.i("IMAGE PICKER", "photo: " + photoUri);
}
String stats =
"all: " + clipData.getItemCount()
+ ", unique: " + uniqueUris.size();
Log.i("IMAGE PICKER", "stats: " + stats);
Toast.makeText(this, stats, Toast.LENGTH_LONG).show();
TextView textView = (TextView) findViewById(R.id.output_text);
textView.setText(stats);
}
}
}
活動の完全なコードはここにある:ここでhttps://github.com/Leonti/android-saf-duplicates/blob/master/app/src/main/java/com/example/leonti/googledriveduplicatesdebugging/MainActivity.java
は、あなたが問題を再現できるサンプルのAndroidアプリです。 https://github.com/Leonti/android-saf-duplicates ちょうどそれを電話機にインストールして、いくつかの画像を選択すると(より良いものになると)、それは合計カウントとユニークなエントリの数を示します。
Googleドライブや写真から写真を選択しても問題はありません。ほとんどの場合、結果は重複します。
何がうまくいかないのか分かりません。 Androidエミュレータで同じコードを実行しました(別のアカウントを使用してこのGoogleドライブのフォルダを共有しました)、期待どおりに動作しています。すべての結果は一意です。
私は任意のヘルプのAndroid 7.0
ネクサス5Xに感謝を実行していますよ!
:アンドロイド6.0エミュレータ
は、ここでは、バグレポートを作成しましたか? Clipdataまたは作成した配列リストの1つにありますか? – greenapps
このような大きなリストを投稿することは意味がありません。私たちはそれを調べなければなりませんか?どうすればそれをしなければならないでしょうか? – greenapps
Clipdataから配列を作成しているので、クリップデータと配列の両方に重複があります。 @greenapps参照用にリストを含めましたが、誰もそれを調べる必要はありません。重大な部分は重複していることです。しかし、実際の結果が関連していると考える人は、http://www.somacon.com/p568.phpのようなオンラインツールを使用して重複を確認したり、パターンを確認したりすることができます。 – Leonti