我正在使用Twilio Rest API使用android studio发送无线命令。 我已经根据他们的无线命令文档实现了代码结构。但是当我按下按钮以获取响应时,而不是获得期望的结果时,我得到的是未经授权的401响应。我是第一次使用他们的API,因此显然不知道我在做什么错。
这是我的代码:
public void byApi() {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(ApiRetro.BASE_URL)
.build();
此处SIMSID是twilio sim卡的唯一主题,我发送的命令是hello机器! 凭据凭据=新凭据(SIMSID,COMMAND);
ApiRetro apiRetro = retrofit.create(ApiRetro.class);
Call<ResponseBody> call = apiRetro.getSid(credentials);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if(response.isSuccessful())
{
try {
String hyyy=response.body().string();
try {
JSONObject jsonObject=new JSONObject(hyyy);
String test=jsonObject.getString("status");
Log.v("sdfg",test);
} catch (JSONException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
Log.v("TAG",response.body().string());
Toast.makeText(getApplicationContext(),response.body().string(),Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
}
}
else
{
Toast.makeText(getApplicationContext(),response.code()+" "+response.message(),Toast.LENGTH_LONG).show();
Log.v("one", String.valueOf(response.errorBody()));
Log.v("two",response.message());
Log.v("three", String.valueOf(response.code()));
Log.v("four", String.valueOf(response.headers()));
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
t.getStackTrace();
}
});
}
翻新请求的界面如下:
String BASE_URL = "https://wireless.twilio.com/v1/";
@Headers({"AccountSid:yyyyyyyyyyyyyyyyyxxxx",
"AuthToken: yyyyyyyyyyyyyyyyyyyyxxx",
"token: ",
"Content-Type: application/x-www-form-urlencoded"})
@POST("Commands")
Call<ResponseBody> getSid(@Body Credentials credentials);
身体课:
public class Credentials {
String Sim;
String Command;
public Credentials(String sim, String command) {
Sim = sim;
Command = command;
}
public String getSim() {
return Sim;
}
public void setSim(String sim) {
Sim = sim;
}
public String getCommand() {
return Command;
}
public void setCommand(String command) {
Command = command;
}
}
答案 0 :(得分:0)
好的,我解决了。问题出在请求中,我没有按照要求发送。
通过添加拦截器解决了我的问题
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new BasicInterceptor(SID,AUTH))
.build();
然后
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.baseUrl(ApiRetro.BASE_URL)
.build();
并从类似的界面中删除标头
@POST("Commands")
@FormUrlEncoded
Call<ResponseBody> getSid(@Field("Sim") String sim,@Field("Command") String command);