Retrofit request with multiple parameters in kotlin not working correct
My code in the Api interface:
interface APIServiceUpdateTeam {
@FormUrlEncoded
@PUT("/api/v1/updateTeam/{Id}/")
suspend fun updateTeam(@Path("Id")teamId: String,
@Header("Authorization") token: String,
@FieldMap params:
HashMap<String?,ArrayList<*>>): Response<ResponseBody>,
}
//my code the request call
val params = HashMap<String?, ArrayList<*>>()
params.put("members",teamMemberListToUpdate)
params.put("name",teamIdToAdd)
params.put("password", passwordTeamAdd)
val response =
service.updateTeam(teamIdToAdd.toString(),"Token ${token}", params)
//So the post/put request is 2 times a string (name and password) and 1 Array of integers, int his example members. In my example here the HashMap is an array of integers so the name and password are not accepted.
2 answers
-
answered 2020-11-25 09:07
Petr Kubáč
If I understand correctly you want to specify value type as
Any
typeval params = HashMap<String?, Any>() params.put("members",teamMemberListToUpdate) params.put("name",teamIdToAdd) params.put("password", passwordTeamAdd)
This way you can put different types into map
-
answered 2020-11-25 15:39
Dali Hamza
you shouldn't change the password like that you need to make it separatly from the PUT. you can make your put like this :
@Headers( "Content-Type: application/json" ) @PUT("/api/v1/updateTeam/{id}") suspend fun modify( @Header("Authorization") authorization: String, @Path("id") id: String, @Body team: Team, ): Response<ResponseBody>
or
@FormUrlEncoded @PUT("/api/v1/updateTeam/{id}") suspend fun modify( @Header("Authorization") authorization: String, @Path("id") id: String, @Field("membres") member: List<Any>, @Field("name") name: String, ): Response<ResponseBody>
See also questions close to this topic
-
How to know if activity is created?
In a project there will be lots of pages(activities) and user will be able to switch between these pages (activities). So when user press the corresponding button that opens page_2 from page_1, I need to create a new Activity. However, if user comes back to page_1 and try to open the page_2 again, there will be a new Activity created again, instead of opening the previously created activity ( I want user to see the page_2 as he/she left it without anychanges). So I want to put something like
if(SecondActivity==null) { //Create new activity } start(new_activity);
Here is the corresponding code ( I couldn't implement onClickListener because I couldn't disable it in
onPause()
method... so I usedonClick
from xml)public class MainActivity extends Activity { private View.OnClickListener openSecondPage = new View.OnClickListener() { @Override public void onClick(View v) { Button button_newPage = findViewById(R.id.button_newpage); button_newPage.setText("Clicked"); Intent secondPage = new Intent(getApplicationContext(), SecondActivity.class ); startActivity(secondPage); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onResume(){ super.onResume(); //Button button_newPage = findViewById(R.id.button_newpage); // button_newPage.setOnClickListener(openSecondPage); } public void onPause(){ super.onPause(); //Destroy the on click listener Button button_newPage = findViewById(R.id.button_newpage); // button_newPage.setOnClickListener(null); } public void openSecondPage(View v) { Intent secondPage = new Intent(getApplicationContext(), SecondActivity.class ); startActivity(secondPage); } }
Edit: Here is the new code with Flags:
MainActivity.java code:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onResume(){ super.onResume(); } public void onPause(){ super.onPause(); } public void openSecondPage(View v) { Intent secondPage = new Intent(getApplicationContext(), SecondActivity.class ); secondPage.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); startActivity(secondPage); } }
SecondActivity.java code:
public class SecondActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.secondactivity); } protected void onResume() { super.onResume(); } public void goBack(View v) { } public void goMainPage(View v) { Intent mainPage = new Intent(getApplicationContext(),MainActivity.class); mainPage.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); startActivity(mainPage); } }
-
Server throwing broken pipe exception
Now I am working on client-server application, client side using exoplayer to request video file from server (struts based server), when the exoplayer first time requesting video source, struts throws IOException: Broken pipe, but it loads the video file successfully on the second try. On server side throws such exception every time the client restarts.
On the some posts, I saw some said that client closing connection, but here exoplayer requests the source and i don't know how to increase timeout for the its connection. Please help me to figure out the problem?
Error:
Jan 26, 2021 3:35:24 PM com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor error SEVERE: java.io.IOException: Broken pipe org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:351) at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:776) at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:298) at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:251) at org.apache.catalina.connector.CoyoteOutputStream.close(CoyoteOutputStream.java:157) at org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:305) at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:193) at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:372) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:276) at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:168) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:76) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:125) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:253) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:140) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:575) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: java.io.IOException: Broken pipe at sun.nio.ch.FileDispatcherImpl.write0(Native Method) at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) at sun.nio.ch.IOUtil.write(IOUtil.java:65) at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471) at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:140) at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101) at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:152) at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1261) at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:793) at org.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:563) at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:501) at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.doWrite(Http11OutputBuffer.java:538) at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:112) at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:190) at org.apache.coyote.Response.doWrite(Response.java:601) at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:339) ... 77 more
-
Android ACRA crash reporting problem on 4.3 Android version
My application.java looks like this:
@AcraCore(buildConfigClass = BuildConfig.class, reportFormat= StringFormat.JSON) @AcraHttpSender(uri="my_url", httpMethod=org.acra.sender.HttpSender.Method.POST) public class MyApplication extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); ACRA.init(this); } }
and when I start an app on Android 4.3 (Sony Xperia T) app crashes on
ACRA.init(this)
. I was testing also on Android 9 and there is no problem. This is error log:java.util.ServiceConfigurationError: Couldn't instantiate class org.acra.config.HttpSenderConfigurationBuilderFactory at java.util.ServiceLoader$ServiceIterator.next(ServiceLoader.java:216) at org.acra.plugins.ServicePluginLoader.loadInternal(ServicePluginLoader.java:61) at org.acra.plugins.ServicePluginLoader.load(ServicePluginLoader.java:38) at org.acra.config.BaseCoreConfigurationBuilder.configurationBuilders(BaseCoreConfigurationBuilder.java:58) at org.acra.config.BaseCoreConfigurationBuilder.preBuild(BaseCoreConfigurationBuilder.java:87) at org.acra.config.CoreConfigurationBuilder.build(CoreConfigurationBuilder.java:846) at org.acra.ACRA.init(ACRA.java:160) at org.acra.ACRA.init(ACRA.java:144) at org.acra.ACRA.init(ACRA.java:127) at pl.jawegiel.endlessblow.MyApplication.attachBaseContext(MyApplication.java:18) at android.app.Application.attach(Application.java:181) at android.app.Instrumentation.newApplication(Instrumentation.java:991) at android.app.Instrumentation.newApplication(Instrumentation.java:975) at android.app.LoadedApk.makeApplication(LoadedApk.java:511) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4539) at android.app.ActivityThread.access$1300(ActivityThread.java:150) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1358) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:213) at android.app.ActivityThread.main(ActivityThread.java:5225) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassNotFoundException: Didn't find class "org.acra.config.HttpSenderConfigurationBuilderFactory" on path: DexPathList[[zip file "/data/app/pl.jawegiel.endlessblow-2.apk"],nativeLibraryDirectories=[/data/app-lib/pl.jawegiel.endlessblow-2, /vendor/lib, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53) at java.lang.ClassLoader.loadClass(ClassLoader.java:501) at java.lang.ClassLoader.loadClass(ClassLoader.java:461) at java.util.ServiceLoader$ServiceIterator.next(ServiceLoader.java:214) at org.acra.plugins.ServicePluginLoader.loadInternal(ServicePluginLoader.java:61) at org.acra.plugins.ServicePluginLoader.load(ServicePluginLoader.java:38) at org.acra.config.BaseCoreConfigurationBuilder.configurationBuilders(BaseCoreConfigurationBuilder.java:58) at org.acra.config.BaseCoreConfigurationBuilder.preBuild(BaseCoreConfigurationBuilder.java:87) at org.acra.config.CoreConfigurationBuilder.build(CoreConfigurationBuilder.java:846) at org.acra.ACRA.init(ACRA.java:160) at org.acra.ACRA.init(ACRA.java:144) at org.acra.ACRA.init(ACRA.java:127) at pl.jawegiel.endlessblow.MyApplication.attachBaseContext(MyApplication.java:18) at android.app.Application.attach(Application.java:181) at android.app.Instrumentation.newApplication(Instrumentation.java:991) at android.app.Instrumentation.newApplication(Instrumentation.java:975) at android.app.LoadedApk.makeApplication(LoadedApk.java:511) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4539) at android.app.ActivityThread.access$1300(ActivityThread.java:150) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1358) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:213) at android.app.ActivityThread.main(ActivityThread.java:5225) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525)
and there is many more errors like:
java.util.ServiceConfigurationError: Couldn't instantiate class org.acra.config.DialogConfigurationBuilderFactory java.util.ServiceConfigurationError: Couldn't instantiate class org.acra.collector.ConfigurationCollector Couldn't instantiate class ...
and so on.
What is the minimum Android version required for ACRA crash reporting? But maybe there is another problem?
-
videoView shows only stopped movie
I made a fragment with following code:
class play_video : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_play_video) val vidView = findViewById<VideoView>(R.id.videoView) val vidController = MediaController(this) val viduri = Uri.parse("android.resource://"+packageName+"/"+R.raw.test1) vidView.setVideoURI(viduri) vidView.start() }
}
It shows the first frame of video and plays sound, but the video was not played and it only shows stopped image.
Is there anything I did wrong ?
The file name of the movie file is 'test1.MOV'
-
Serialize value-types without creating additional fields for 'value' in the database
With firestore it's possible to use
(data) class(es)
data class Address(var person: Person = Person("", "")) data class Person(var firstName: String = "", var lastName: String = "")
that will be serialized into their properties like that
document: person: firstName: "John" lastName: "Doe"
However, I'd like to have a value-type for
firstName
like this one:data class FirstName(var value: String = "") { init { // check value etc. } }
but when I use it for the
firstName
in its default form, it'll serialize intodocument: person: firstName: value: "John" lastName: "Doe"
In order to de/serialize it, I use the standard mechanism like:
// Serialize/write firestore .collection("path") .document() .set(address) // Deserialize/read e.g. firestore .collection("path") .whereEqualTo("person.firstName", "John") .get() .await() .toObjects(Address::class.java)
How can I make it serialize into and deserialize from a string so that the
value
field is not created? -
Where is set java permission in Teamcity?
When I try with Kotlin DSL to execute the file or make an HTTP request, I get such errors:
java.security.AccessControlContext [472]: java.security.AccessControlException: access denied ("java.net.SocketPermission" "my.url:port" "connect,resolve")
or
java.security.AccessControlContext [472]: java.security.AccessControlException: access denied ("java.io.FilePermission" "<<ALL FILES>>" "execute")
On my TeamCity server I made changes in java.policy by adding the value in grant section:
permission java.security.AllPermission;
But it didn't no effect.