使用 Retrofit 从 Android 向服务器发送字符串数组

Posted

技术标签:

【中文标题】使用 Retrofit 从 Android 向服务器发送字符串数组【英文标题】:Send an array of strings to a server from Android using Retrofit 【发布时间】:2019-11-30 01:49:26 【问题描述】:

我想使用 Retrofit 从 android 应用程序向服务器发送一个字符串数组。我不知道如何在服务器端发送和接收它:

//api interface...

@FormUrlEncoded
@POST("sendArray.php")
Call<ResponseModel> sendAns(@Field("ans[]") String[] ans);

//sending array in main activity

String[] ans = "ans1","ans2","ans3";
Call<ResponseModel> call = apiObject.sendAns(ans);
call.en....

//server side php code to get array

$ans = $_POST['ans[]'];
$ans1 = $ans[1];

我预计 $ans1 = "ans2" 的值,但我们什么也没得到。

【问题讨论】:

你为什么不var_dump($_POST) 看看你的价值是什么样的,然后你就知道如何访问它了。 参考这个***.com/questions/37698715/… 你能给我看看 var_dump($_POST) 的代码吗 【参考方案1】:

像这样发送和接收数组:

  @POST("sendArray.php")
  Call<ResponseModel> getSomething(@Body String[] ans );

如果你想给你的数组命名,那么创建RequestModel,里面有你想要的数组。您也可以使用@SerializedName 注释设置名称

public class YourBodyRequest 
    @SerializedName("ans[]")
    public String[] ans;

还有:


 @POST("sendArray.php")
 Call<ResponseModel> request(@Body YourBodyRequest request );

【讨论】:

感谢您的宝贵时间。你能发布php代码来接收吗? 此时,java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.asus.simple.ResponseModel.getResponse()' on an null object reference at com .example.asus.simple.MainActivity$1.onResponse(MainActivity.java:90) 请阅读***.com/questions/8207488/… 你得到 null 因为没有响应,还有网络和响应我建议在做任何事情之前总是检查 null answer_table(ans, ques_id, test_code) 值 ('$b','12','XYZ')"; $result = mysqli_query($con,$qry); if($result) $status = "ok"; echo json_encode(array("response"=>$status)); else $status = "错误"; echo json_encode(array("response"=>$status)); ?>

以上是关于使用 Retrofit 从 Android 向服务器发送字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Retrofit 发送多部分/表单数据?

使用OkHttp拦截器和Retrofit进行缓存

使用OkHttp拦截器和Retrofit进行缓存

Android Retrofit2中Part和PartMap的区别

Android – 使用带有 Jetpack Compose 的 Retrofit 库进行 JSON 解析

Android – 使用带有 Jetpack Compose 的 Retrofit 库进行 JSON 解析