1

マルチパートを使用してAndroidからサーバーに複数の値を投稿しようとしています

私がやったこと - 私は1つの画像を(アンドロイドドローアブルから)サーバーに送信できます。

私の現在のコード:

try
        {
            Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher); 

            HttpClient httpClient = new DefaultHttpClient();
            HttpPost postRequest = new HttpPost("http://10.0.2.2:7002/Details/");
            MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
            try{
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                bitmapOrg.compress(CompressFormat.JPEG, 75, bos);
                byte[] data = bos.toByteArray();
                ByteArrayBody bab = new ByteArrayBody(data, "forest.jpg");
                reqEntity.addPart("key", bab);
            }
            catch(Exception e){
                //Log.v("Exception in Image", ""+e);
                reqEntity.addPart("picture", new StringBody(""));
            }
            postRequest.setEntity(reqEntity);       
            HttpResponse response = httpClient.execute(postRequest);
            BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
            String sResponse;
            StringBuilder s = new StringBuilder();
            while ((sResponse = reader.readLine()) != null) {
                s = s.append(sResponse);
            }
        }catch(Exception e){
            e.getStackTrace();
        }

2つの画像を送信する方法::これは私の提案したモデルです

try
        {
                        Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);
                        Bitmap bitmapOrg2 = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher2);   

            HttpClient httpClient = new DefaultHttpClient();
            HttpPost postRequest = new        HttpPost("http://10.0.2.2:7002/Details/");
            MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
            try{
                ByteArrayOutputStream bos = new ByteArrayOutputStream();

                                bitmapOrg.compress(CompressFormat.JPEG, 75, bos);       
                                bitmapOrg2.compress(CompressFormat.JPEG, 75, bos);

                                byte[] data = bos.toByteArray();

                    ByteArrayBody bab = new ByteArrayBody(data, "forest.jpg");
                                ByteArrayBody bab2 = new ByteArrayBody(data, "earth.jpg");

                                reqEntity.addPart("key", bab);
                                reqEntity.addPart("key1", bab2);
            }
            catch(Exception e){
                //Log.v("Exception in Image", ""+e);
                reqEntity.addPart("picture", new StringBody(""));
            }
            postRequest.setEntity(reqEntity);       
            HttpResponse response = httpClient.execute(postRequest);
            BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
            String sResponse;
            StringBuilder s = new StringBuilder();
            while ((sResponse = reader.readLine()) != null) {
                s = s.append(sResponse);
            }
        }catch(Exception e){
            e.getStackTrace();
        }

私の質問:: 上記の複数の画像を渡す正しい方法に従っていますか、それともより良い方法がありますか?

4

2 に答える 2

1

はい、複数のファイルをアップロードまたはダウンロードするためのより良い方法があります。まず、AsyncTask を定義する必要があります。そのdoInBackground関数で、ファイルをアップロード/ダウンロードするコードを記述する必要があります。

これにより、まず第一に、ダウンロード/アップロード中にビューがフリーズしなくなります。複数のファイルは非同期でランチされます。次のように簡単に呼び出すことができます。

new MyAsyncTask(fileUrl1).execute();
new MyAsyncTask(fileUrl2).execute();

これは、HTTP 要求を使用するための、より優れた管理しやすい方法です。

私があなたを助けたことを願っています。幸運を

于 2013-12-09T10:35:25.497 に答える