2016-05-02 6 views
1

Ich möchte das lokale Galeriebild an api senden. Ich habe hinzugefügt, dass Bilder als ein mehrteiliger Typdfile und Iam auch einige Zeichenkettedaten in der gleichen api als ein mehrteiliger typestring senden.Nachrüstung - @Body-Parameter können nicht mit Formular- oder Multi-Teil-Kodierung verwendet werden. (Parameter # 1)

Also, wenn ich die API getroffen habe, bekomme ich diese Antwort.

@ Body-Parameter können nicht mit Formular- oder Multi-Teil-Codierung verwendet werden. (Parameter # 1)

Mein Code:

   //Add the values into Multipart. 
       MultipartTypedOutput multipartTypedOutput = new MultipartTypedOutput(); 
       //Add the ACCESS_TOKEN 
       //MULTIPLEIMAGE 
       multipartTypedOutput.addPart(Constants.LOGO_IMAGE, new TypedFile("image/*", new File("" + encodedByte))); 
       //Add the ACCESS_TOKEN 
       multipartTypedOutput.addPart(Constants.COMPANY_NAME, new TypedString(companyName)); 
       multipartTypedOutput.addPart(Constants.TAGS, new TypedString(projectTags)); 
       multipartTypedOutput.addPart(Constants.PROJECT_DESC, new TypedString(projectDesc)); 
       multipartTypedOutput.addPart(Constants.CATEGORY, new TypedString(categories)); 
       multipartTypedOutput.addPart(Constants.STYLE, new TypedString(launchStyle)); 
       multipartTypedOutput.addPart(Constants.COLOR_CODE, new TypedString(colorCode)); 
       multipartTypedOutput.addPart(Constants.CONTEST_PACK, new TypedString(contestPackage)); 
       multipartTypedOutput.addPart(Constants.PAYMENT_GATE, new TypedString(paymentGateway)); 
       multipartTypedOutput.addPart(Constants.USERID, new TypedString(userId)); 
       if (connectionDetector.isOnline()) { 
        apiManager.getApiService().launchApi(multipartTypedOutput, new LaunchCallback(LaunchStep4Fragment.this)); 
       } else { 
        Toast.makeText(getActivity(), getString(R.string.check_internet), Toast.LENGTH_SHORT).show(); 
       } 

Schnittstelle Methode

/** 
* @param multipartTypedOutput 
* @param callback 
*/ 
@FormUrlEncoded 
@POST(Constants.STORE_CONTEST) 
void launchApi(@Body MultipartTypedOutput multipartTypedOutput , Callback<LaunchResponse> callback); 

In api Seite, sie bekommen alles als String zurück. Also, ob es vom Parameter-Typ oder vom Code-Problem abhängt?

Was soll ich ändern, um das Ergebnis zu erhalten?

Bitte könnte mir jemand erklären, wenn ich etwas falsch mache.

Antwort

1

Verwendung Retrofit 2

@Headers({ 
     "Accept: application/json", 
}) 
@Multipart 
@POST("upload") 
Call<ResponseBody> uploadImage(@Part("picture\"; filename=\"picture") RequestBody picture, @Part("company_name") RequestBody company_name); 
+0

Also, ich muss jeden Parameter eins nach dem anderen senden. kannst du mir beispiel für das senden von bildwerten wie diesem Multipart geben. MultipartTypedOutput multipartTypedOutput = neu MultipartTypedOutput(); multipartTypedOutput.addPart (Constants.LOGO_IMAGE, neue TypedFile ("image/*", neue Datei ("" + encodedByte))); –

+0

'Uri pics = Uri.fromFile (neue Datei (finalPath)); Bitmap bitmap1 = decodeBitmap (Bilder, finalPath); ByteArrayOutputStream byteArrayOutputStream1 = neues ByteArrayOutputStream(); bitmap1.compress (Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream1); RequestBody fbody = AnfrageBody.create (MediaType.parse ("multipart/form-data"), byteArrayOutputStream1.toByteArray()); RequestBody name = RequestBody.create (MediaType.parse ("text/plain"), Firmenname string); ' – yozzy

0

Try @FormUrlEncoded zu entfernen hatte ich den gleichen Fehler ich @FormUrlEncoded entfernt und es funktionierte

//@FormUrlEncoded 
    @POST("saveOgrYoklama") 
    Call<YoklamaStatus> sendYoklamaList2(@Body Yoklama yoklama); 

Was ich versuchte, an den Server zu senden

enter image description here

Verwandte Themen