2017-10-26 7 views
0

下記のコードで画像をサーバーにアップロードしようとしています。複数のAndroid /フォームデータを送信するAndroid

button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Ion.with(getContext()) 
        .load("postAddress/account/upload/image") 
        .setMultipartParameter("userPhoto", "xx") 
        .setMultipartFile("upload", "image/jpeg", new File("/storage/emulated/0/Download/images.jpeg")) 
        .asJsonObject() 
        .setCallback(new FutureCallback<JsonObject>() { 
         @Override 
         public void onCompleted(Exception e, JsonObject result) { 
          e.printStackTrace(); 

         } 
        }); 
     } 
    }); 

ただし、このエラーが表示されます。

10-26 17:58:51.864 19292-19292/tr.example W/System.err: com.google.gson.JsonParseException: unable to parse json 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.ion.gson.GsonParser$1.transform(GsonParser.java:55) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.ion.gson.GsonParser$1.transform(GsonParser.java:41) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.future.TransformFuture.onCompleted(TransformFuture.java:14) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.future.SimpleFuture.handleCallbackUnlocked(SimpleFuture.java:107) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.future.SimpleFuture.setComplete(SimpleFuture.java:141) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.future.SimpleFuture.setComplete(SimpleFuture.java:128) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.parser.ByteBufferListParser$3.onCompleted(ByteBufferListParser.java:43) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.DataEmitterBase.report(DataEmitterBase.java:16) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.http.AsyncHttpResponseImpl.report(AsyncHttpResponseImpl.java:92) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.http.AsyncHttpClient$4.report(AsyncHttpClient.java:424) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.FilteredDataEmitter$1.onCompleted(FilteredDataEmitter.java:24) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.DataEmitterBase.report(DataEmitterBase.java:16) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.http.filter.ContentLengthFilter.report(ContentLengthFilter.java:16) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.http.filter.ContentLengthFilter.onDataAvailable(ContentLengthFilter.java:39) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.Util.emitAllData(Util.java:23) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.AsyncNetworkSocket.onReadable(AsyncNetworkSocket.java:152) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.AsyncServer.runLoop(AsyncServer.java:821) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.AsyncServer.run(AsyncServer.java:658) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.AsyncServer.access$800(AsyncServer.java:44) 
10-26 17:58:51.864 19292-19292/tr.example W/System.err:  at com.koushikdutta.async.AsyncServer$14.run(AsyncServer.java:600) 

私のサーバーにデータを送信しないようです。

私は、サーバー側

にPHPスリムなフレームワークを使用しています。ここのコードがあります。

use \Psr\Http\Message\ServerRequestInterface as Request; 
use \Psr\Http\Message\ResponseInterface as Response; 

require '../vendor/autoload.php'; 
$app = new \Slim\App; 
$container = $app->getContainer(); 
$container['upload_directory'] = __DIR__ . '/uploads'; 

$app->post('/account/upload/image', function (Request $request, Response $response) { 
    $uploadedFiles = $request->getUploadedFiles(); 
    $directory = $this->get('upload_directory'); 

    $uploadedFile = $uploadedFiles['userPhoto']; 
    if ($uploadedFile->getError() === UPLOAD_ERR_OK) { 
     $filename = moveUploadedFile($directory, $uploadedFile); 
     $response->write('uploaded ' . $filename . '<br/>'); 
    } 


}); 


$app->run(); 

?> 

サーバ側インプリメンテーションは、スリムなフレームワークによって提供される例示的なマルチパート/フォームデータコードです。

答えて

0

あなたのPHPコードはJSONとして応答していないようです。
あなたのアンドロイドコードはJSONを期待しています。 json-parsingの例外を引き起こす可能性があります。

あなたがアンドロイド側を解決したい場合は、コードasJsongObject()asString()に変更してください。

Ion.with(getContext()) 
        ..... 
        .asJsonObject() //<-- before 
        .setCallback(new FutureCallback<JsonObject>() { 

=> 
Ion.with(getContext()) 
       ... 
       .asString() //<-- after 
       .setCallback(...) 
関連する問題