Android studio Android POST call使用改型获取服务器500错误

Android studio Android POST call使用改型获取服务器500错误,android-studio,post,android-developer-api,Android Studio,Post,Android Developer Api,这似乎是一个非常简单的问题,但我无法理解。我调用的API在Postman中运行良好,并形成了应用程序的iOS版本。只是安卓让我大吃一惊。咖啡可能不够。我正在使用Android Studio进行最新更新 API接受一个长URL作为JSON主体,并返回一个短URL作为字符串 错误屏幕截图: private void getShortURL() { //Get full url final String fullURL = Constants.SHARE_BASE_URI + urlP

这似乎是一个非常简单的问题,但我无法理解。我调用的API在Postman中运行良好,并形成了应用程序的iOS版本。只是安卓让我大吃一惊。咖啡可能不够。我正在使用Android Studio进行最新更新

API接受一个长URL作为JSON主体,并返回一个短URL作为字符串

错误屏幕截图:

private void getShortURL() {
    //Get full url
    final String fullURL = Constants.SHARE_BASE_URI + urlParameters;

    //Convert URL to JSON formatted data
    Map<String,String> data = new HashMap<String,String>();
    data.put("URL",fullURL);
    String jsonData = new GsonBuilder().create().toJson(data,Map.class);

    //Call API and pass in JSON to get Short URL
    Call<ResponseBody> getDynamicLinkCall = RetrofitAdapter.getRetroInterface(Constants.BASE_URI).getDynamicLink_String(Constants.getTimestamp(),Constants.APPLICATION,"application/json", jsonData);

    getDynamicLinkCall.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            if (response == null ||  response.code() != Constants.SUCCESS) {
                //Share Short URL
                share(response.body().toString());
            }
            else
            {
                //If Short URl Failed share long URL
                share(fullURL);
            }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            //If Short URl Failed share long URL
            share(fullURL);
        }
    });
}
package com.company.appname.util;
import android.content.Context;
import com.company.appname.Constants;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookiePolicy;
import java.util.concurrent.TimeUnit;
import okhttp3.CookieJar;
import okhttp3.JavaNetCookieJar;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;

public class RetrofitAdapter {
    public static OkHttpClient okHttpClient;
    public static Context context;

public static RetrofitInterface getRetroInterface(String endPoint){
    return createRestAdapter(endPoint).create(RetrofitInterface.class);
}

public static Retrofit createRestAdapter(String endPoint){
    boolean isMobileAPI = false;

    //Check if the endpoint is the mobile api
    if(endPoint.equalsIgnoreCase(Constants.MOBILE_SERVICE_BASE_URI)){
        isMobileAPI = true;
    }

    //Create a rest adapter
    return  new Retrofit.Builder()
            .client(createOkClient(isMobileAPI))
            .baseUrl(endPoint)
            .addConverterFactory(JacksonConverterFactory.create())
            .build();
}

public static OkHttpClient createOkClient(boolean isMobileAPI){

    NextModel next = NextModel.getInstance();

    if(next.okClient == null || !isMobileAPI) {
        //Create ok http Client
        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        //Set timeouts
        httpClient.readTimeout(Constants.TIMEOUT, TimeUnit.MILLISECONDS);
        httpClient.connectTimeout(Constants.TIMEOUT, TimeUnit.MILLISECONDS);

        CookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));

        //Add cookieJar to Http Client
        httpClient.cookieJar(cookieJar);

        //Create OkHttpClient
        okHttpClient = httpClient.build();

        return okHttpClient;
    }else{
        //Return already created okclient
        return next.okClient;
    }
}


public static OkHttpClient getOkClient() {
    return okHttpClient;
}

}
private void getShortURL() {
    //Get full url
    final String fullURL = Constants.SHARE_BASE_URI + urlParams;

    //Convert URL to JSON formatted data
    Map<String,String> data = new HashMap<String,String>();
    data.put("LINK",fullURL);
    String jsonData = new GsonBuilder().create().toJson(data,Map.class);

    RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), jsonData);

    //Call API and pass in JSON to get Short URL
    Call<String> getDynamicLinkCall = RetrofitAdapter.getRetroInterface(Constants.BASE_URI).getDynamicLink_String(Constants.getTimestamp(),Constants.APPLICATION,"application/json", body);

    getDynamicLinkCall.enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {
            if (response == null ||  response.code() != Constants.SUCCESS) {
                //Share Short URL
                share(response.body().toString());
            }
            else
            {
                //If Short URl Failed share long URL
                share(fullURL);
            }
        }

        @Override
        public void onFailure(Call<String> call, Throwable t) {
            //If Short URl Failed share long URL
            share(fullURL);
        }
    });
}
@POST("URLShortner")
Call<String> getDynamicLink_String(@Header("TimeStamp") String timestamp, @Header("Application") String application, @Header("Content-Type") String contentType, @Body RequestBody jsonData);

电话留言:

private void getShortURL() {
    //Get full url
    final String fullURL = Constants.SHARE_BASE_URI + urlParameters;

    //Convert URL to JSON formatted data
    Map<String,String> data = new HashMap<String,String>();
    data.put("URL",fullURL);
    String jsonData = new GsonBuilder().create().toJson(data,Map.class);

    //Call API and pass in JSON to get Short URL
    Call<ResponseBody> getDynamicLinkCall = RetrofitAdapter.getRetroInterface(Constants.BASE_URI).getDynamicLink_String(Constants.getTimestamp(),Constants.APPLICATION,"application/json", jsonData);

    getDynamicLinkCall.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            if (response == null ||  response.code() != Constants.SUCCESS) {
                //Share Short URL
                share(response.body().toString());
            }
            else
            {
                //If Short URl Failed share long URL
                share(fullURL);
            }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            //If Short URl Failed share long URL
            share(fullURL);
        }
    });
}
package com.company.appname.util;
import android.content.Context;
import com.company.appname.Constants;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookiePolicy;
import java.util.concurrent.TimeUnit;
import okhttp3.CookieJar;
import okhttp3.JavaNetCookieJar;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;

public class RetrofitAdapter {
    public static OkHttpClient okHttpClient;
    public static Context context;

public static RetrofitInterface getRetroInterface(String endPoint){
    return createRestAdapter(endPoint).create(RetrofitInterface.class);
}

public static Retrofit createRestAdapter(String endPoint){
    boolean isMobileAPI = false;

    //Check if the endpoint is the mobile api
    if(endPoint.equalsIgnoreCase(Constants.MOBILE_SERVICE_BASE_URI)){
        isMobileAPI = true;
    }

    //Create a rest adapter
    return  new Retrofit.Builder()
            .client(createOkClient(isMobileAPI))
            .baseUrl(endPoint)
            .addConverterFactory(JacksonConverterFactory.create())
            .build();
}

public static OkHttpClient createOkClient(boolean isMobileAPI){

    NextModel next = NextModel.getInstance();

    if(next.okClient == null || !isMobileAPI) {
        //Create ok http Client
        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        //Set timeouts
        httpClient.readTimeout(Constants.TIMEOUT, TimeUnit.MILLISECONDS);
        httpClient.connectTimeout(Constants.TIMEOUT, TimeUnit.MILLISECONDS);

        CookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));

        //Add cookieJar to Http Client
        httpClient.cookieJar(cookieJar);

        //Create OkHttpClient
        okHttpClient = httpClient.build();

        return okHttpClient;
    }else{
        //Return already created okclient
        return next.okClient;
    }
}


public static OkHttpClient getOkClient() {
    return okHttpClient;
}

}
private void getShortURL() {
    //Get full url
    final String fullURL = Constants.SHARE_BASE_URI + urlParams;

    //Convert URL to JSON formatted data
    Map<String,String> data = new HashMap<String,String>();
    data.put("LINK",fullURL);
    String jsonData = new GsonBuilder().create().toJson(data,Map.class);

    RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), jsonData);

    //Call API and pass in JSON to get Short URL
    Call<String> getDynamicLinkCall = RetrofitAdapter.getRetroInterface(Constants.BASE_URI).getDynamicLink_String(Constants.getTimestamp(),Constants.APPLICATION,"application/json", body);

    getDynamicLinkCall.enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {
            if (response == null ||  response.code() != Constants.SUCCESS) {
                //Share Short URL
                share(response.body().toString());
            }
            else
            {
                //If Short URl Failed share long URL
                share(fullURL);
            }
        }

        @Override
        public void onFailure(Call<String> call, Throwable t) {
            //If Short URl Failed share long URL
            share(fullURL);
        }
    });
}
@POST("URLShortner")
Call<String> getDynamicLink_String(@Header("TimeStamp") String timestamp, @Header("Application") String application, @Header("Content-Type") String contentType, @Body RequestBody jsonData);
我错过了什么


提前谢谢

好的,我们发现了问题。我们缺少以下代码行:

RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),jsonObject.toString());
这段代码在POST调用之前进入,我们没有发布jsonData,而是发布了修复它的主体。但愿Android Studio给出了某种错误来暗示这一点

完整方法:

private void getShortURL() {
    //Get full url
    final String fullURL = Constants.SHARE_BASE_URI + urlParameters;

    //Convert URL to JSON formatted data
    Map<String,String> data = new HashMap<String,String>();
    data.put("URL",fullURL);
    String jsonData = new GsonBuilder().create().toJson(data,Map.class);

    //Call API and pass in JSON to get Short URL
    Call<ResponseBody> getDynamicLinkCall = RetrofitAdapter.getRetroInterface(Constants.BASE_URI).getDynamicLink_String(Constants.getTimestamp(),Constants.APPLICATION,"application/json", jsonData);

    getDynamicLinkCall.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            if (response == null ||  response.code() != Constants.SUCCESS) {
                //Share Short URL
                share(response.body().toString());
            }
            else
            {
                //If Short URl Failed share long URL
                share(fullURL);
            }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            //If Short URl Failed share long URL
            share(fullURL);
        }
    });
}
package com.company.appname.util;
import android.content.Context;
import com.company.appname.Constants;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookiePolicy;
import java.util.concurrent.TimeUnit;
import okhttp3.CookieJar;
import okhttp3.JavaNetCookieJar;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;

public class RetrofitAdapter {
    public static OkHttpClient okHttpClient;
    public static Context context;

public static RetrofitInterface getRetroInterface(String endPoint){
    return createRestAdapter(endPoint).create(RetrofitInterface.class);
}

public static Retrofit createRestAdapter(String endPoint){
    boolean isMobileAPI = false;

    //Check if the endpoint is the mobile api
    if(endPoint.equalsIgnoreCase(Constants.MOBILE_SERVICE_BASE_URI)){
        isMobileAPI = true;
    }

    //Create a rest adapter
    return  new Retrofit.Builder()
            .client(createOkClient(isMobileAPI))
            .baseUrl(endPoint)
            .addConverterFactory(JacksonConverterFactory.create())
            .build();
}

public static OkHttpClient createOkClient(boolean isMobileAPI){

    NextModel next = NextModel.getInstance();

    if(next.okClient == null || !isMobileAPI) {
        //Create ok http Client
        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        //Set timeouts
        httpClient.readTimeout(Constants.TIMEOUT, TimeUnit.MILLISECONDS);
        httpClient.connectTimeout(Constants.TIMEOUT, TimeUnit.MILLISECONDS);

        CookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));

        //Add cookieJar to Http Client
        httpClient.cookieJar(cookieJar);

        //Create OkHttpClient
        okHttpClient = httpClient.build();

        return okHttpClient;
    }else{
        //Return already created okclient
        return next.okClient;
    }
}


public static OkHttpClient getOkClient() {
    return okHttpClient;
}

}
private void getShortURL() {
    //Get full url
    final String fullURL = Constants.SHARE_BASE_URI + urlParams;

    //Convert URL to JSON formatted data
    Map<String,String> data = new HashMap<String,String>();
    data.put("LINK",fullURL);
    String jsonData = new GsonBuilder().create().toJson(data,Map.class);

    RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), jsonData);

    //Call API and pass in JSON to get Short URL
    Call<String> getDynamicLinkCall = RetrofitAdapter.getRetroInterface(Constants.BASE_URI).getDynamicLink_String(Constants.getTimestamp(),Constants.APPLICATION,"application/json", body);

    getDynamicLinkCall.enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {
            if (response == null ||  response.code() != Constants.SUCCESS) {
                //Share Short URL
                share(response.body().toString());
            }
            else
            {
                //If Short URl Failed share long URL
                share(fullURL);
            }
        }

        @Override
        public void onFailure(Call<String> call, Throwable t) {
            //If Short URl Failed share long URL
            share(fullURL);
        }
    });
}
@POST("URLShortner")
Call<String> getDynamicLink_String(@Header("TimeStamp") String timestamp, @Header("Application") String application, @Header("Content-Type") String contentType, @Body RequestBody jsonData);
private void getShortURL(){
//获取完整url
最终字符串fullURL=Constants.SHARE_BASE_URI+urlparms;
//将URL转换为JSON格式的数据
映射数据=新的HashMap();
data.put(“LINK”,fullURL);
字符串jsonData=new GsonBuilder().create().toJson(数据,Map.class);
RequestBody=RequestBody.create(okhttp3.MediaType.parse(“application/json;charset=utf-8”)、jsonData);
//调用API并传入JSON以获取短URL
调用getDynamicClinkCall=RefughtAdapter.getRetroInterface(Constants.BASE_URI).getDynamicClink_字符串(Constants.getTimestamp(),Constants.APPLICATION,“APPLICATION/json”,body);
getDynamicLinkCall.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response==null | | response.code()!=Constants.SUCCESS){
//共享短URL
共享(response.body().toString());
}
其他的
{
//如果短URl失败,请共享长URl
共享(完整URL);
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
//如果短URl失败,请共享长URl
共享(完整URL);
}
});
}
interface.java:

private void getShortURL() {
    //Get full url
    final String fullURL = Constants.SHARE_BASE_URI + urlParameters;

    //Convert URL to JSON formatted data
    Map<String,String> data = new HashMap<String,String>();
    data.put("URL",fullURL);
    String jsonData = new GsonBuilder().create().toJson(data,Map.class);

    //Call API and pass in JSON to get Short URL
    Call<ResponseBody> getDynamicLinkCall = RetrofitAdapter.getRetroInterface(Constants.BASE_URI).getDynamicLink_String(Constants.getTimestamp(),Constants.APPLICATION,"application/json", jsonData);

    getDynamicLinkCall.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            if (response == null ||  response.code() != Constants.SUCCESS) {
                //Share Short URL
                share(response.body().toString());
            }
            else
            {
                //If Short URl Failed share long URL
                share(fullURL);
            }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            //If Short URl Failed share long URL
            share(fullURL);
        }
    });
}
package com.company.appname.util;
import android.content.Context;
import com.company.appname.Constants;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookiePolicy;
import java.util.concurrent.TimeUnit;
import okhttp3.CookieJar;
import okhttp3.JavaNetCookieJar;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;

public class RetrofitAdapter {
    public static OkHttpClient okHttpClient;
    public static Context context;

public static RetrofitInterface getRetroInterface(String endPoint){
    return createRestAdapter(endPoint).create(RetrofitInterface.class);
}

public static Retrofit createRestAdapter(String endPoint){
    boolean isMobileAPI = false;

    //Check if the endpoint is the mobile api
    if(endPoint.equalsIgnoreCase(Constants.MOBILE_SERVICE_BASE_URI)){
        isMobileAPI = true;
    }

    //Create a rest adapter
    return  new Retrofit.Builder()
            .client(createOkClient(isMobileAPI))
            .baseUrl(endPoint)
            .addConverterFactory(JacksonConverterFactory.create())
            .build();
}

public static OkHttpClient createOkClient(boolean isMobileAPI){

    NextModel next = NextModel.getInstance();

    if(next.okClient == null || !isMobileAPI) {
        //Create ok http Client
        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        //Set timeouts
        httpClient.readTimeout(Constants.TIMEOUT, TimeUnit.MILLISECONDS);
        httpClient.connectTimeout(Constants.TIMEOUT, TimeUnit.MILLISECONDS);

        CookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));

        //Add cookieJar to Http Client
        httpClient.cookieJar(cookieJar);

        //Create OkHttpClient
        okHttpClient = httpClient.build();

        return okHttpClient;
    }else{
        //Return already created okclient
        return next.okClient;
    }
}


public static OkHttpClient getOkClient() {
    return okHttpClient;
}

}
private void getShortURL() {
    //Get full url
    final String fullURL = Constants.SHARE_BASE_URI + urlParams;

    //Convert URL to JSON formatted data
    Map<String,String> data = new HashMap<String,String>();
    data.put("LINK",fullURL);
    String jsonData = new GsonBuilder().create().toJson(data,Map.class);

    RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), jsonData);

    //Call API and pass in JSON to get Short URL
    Call<String> getDynamicLinkCall = RetrofitAdapter.getRetroInterface(Constants.BASE_URI).getDynamicLink_String(Constants.getTimestamp(),Constants.APPLICATION,"application/json", body);

    getDynamicLinkCall.enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {
            if (response == null ||  response.code() != Constants.SUCCESS) {
                //Share Short URL
                share(response.body().toString());
            }
            else
            {
                //If Short URl Failed share long URL
                share(fullURL);
            }
        }

        @Override
        public void onFailure(Call<String> call, Throwable t) {
            //If Short URl Failed share long URL
            share(fullURL);
        }
    });
}
@POST("URLShortner")
Call<String> getDynamicLink_String(@Header("TimeStamp") String timestamp, @Header("Application") String application, @Header("Content-Type") String contentType, @Body RequestBody jsonData);
@POST(“URLShortner”)
调用getDynamicLink_String(@Header(“TimeStamp”)String TimeStamp、@Header(“Application”)String Application、@Header(“Content Type”)String contentType、@Body RequestBody jsonData);

谢谢大家

这是唯一发生这种情况的情况吗?或者其他帖子也会这样吗?你能把你的护照寄出去吗?这是唯一的一种情况。这就是为什么如此令人沮丧。我将使用改装适配器更新OP。我们刚刚偶然发现了答案,将其发布在下面。谢谢你,路易斯!美好的但这很奇怪,它是如何与一些Android版本协同工作的,而不是与其他版本协同工作的。我很高兴你找到了答案。快乐编码;)