javascript

java

python

c#

android

c++

node.js

php

reactjs

jquery

html

css

ios

.net

git

ruby-on-rails

sql

c

string

ruby

java-使用Retrofit获得原始HTTP响应

我想从我的API REST获取原始的HTTP响应。 我已经尝试过使用此界面:

@POST("/login")
@FormUrlEncoded
Call<retrofit.Response> login(@Field("username") String login, @Field("password") String pass,
                     @Field("appName") String appName, @Field("appKey") String appKey);

但是我得到:

java.lang.IllegalArgumentException:无法为其创建呼叫适配器 改造电话 用于方法Api.login

我这样创建Retrofit

Retrofit.Builder retrofitBuilder = new Retrofit.Builder();
retrofitBuilder.addConverterFactory(JacksonConverterFactory.create());
Retrofit retrofitAdapter = retrofitBuilder.baseUrl(baseUrl).build();
return retrofitAdapter.create(apiClass);
trans by 2020-07-09T15:00:18Z

如何使用Retrofit从异步回调返回String或JSONObject?

例如,打电话

api.getUserName(userId, new Callback<String>() {...});

原因:

retrofit.RetrofitError: retrofit.converter.ConversionException:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 
Expected a string but was BEGIN_OBJECT at line 1 column 2

我认为我必须禁用将gson解析为POJO的方式,但无法弄清楚该怎么做。

trans by 2020-07-08T19:40:44Z

改装回调获取响应正文

我正在测试Retrofit以将其与Volley进行比较,并且我正努力从我的请求中得到答复。 例如,我做这样的事情:

RestAdapter restAdapter = new RestAdapter.Builder()
            .setEndpoint("http://localhost:8080")
            .build();

MyService service = restAdapter.create(MyService.class);
service.getToto("toto", new Callback<Toto>() {

        @Override
        public void success(Toto toto, Response response) {
            // Try to get response body
            BufferedReader reader = null;
            StringBuilder sb = new StringBuilder();
            try {
                reader = new BufferedReader(
                    new InputStreamReader(response.getBody().in()));
                String line;
                try {
                    while ((line = reader.readLine()) != null) {
                        sb.append(line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            String result = sb.toString();
        }

        @Override
        public void failure(RetrofitError error) {}
    });

它可以正常工作,设置了对象IOException,但是出于测试目的,我还想显示服务器返回的JSON响应。

所以我试图从response.getBody()中读取IOException,这是TypedInputStream。不幸的是,我总是得到IOException : Stream is closed

我尝试使用Retrofit中的Utils类,但收到相同的IOException错误。

trans by 2020-07-05T14:34:26Z

java-带承载令牌的Retrofit2授权

我正在尝试使用asp.net webApi,我想将code添加到我的Header中,如下所示:

asp.net webApi但是下面的code无法正常工作:

public interface APIService {
    @Headers({"Authorization", "Bearer "+ token})
    @GET("api/Profiles/GetProfile?id={id}")
    Call<UserProfile> getUser(@Path("id") String id);
}

我的服务器是asp.net webApi。请帮助我该怎么办?

trans by 2020-06-30T22:26:23Z

android-如何获取翻新成功响应状态代码

我无法从响应中获得成功响应状态代码,例如200201等。因为我们可以从RetrofitError类(例如error.isNetworkError()error.isNetworkError())中轻松获取错误代码。是否有任何解决方法来获取状态代码?

trans by 2020-06-30T04:31:00Z

android-Retrofit中的IllegalArgumentException /不能替换b

我有以下代码:

    @GET("api.php?company_name={name}")
    Call<Model> getRoms_center(@Query("name") String name);

根据官方文档,我必须使用@Query,并且我正在使用它,但出现以下错误:

java.lang.IllegalArgumentException: URL query string "company_name={name}" must not have replace block. For dynamic query parameters use @Query.
trans by 2020-02-15T22:08:48Z

改造-不支持@DELETE方法(非主体HTTP方法不能包含@Body或@TypedOutput。)

@DELETE("/job/deletejob")
 Observable<JobDeleteResponseModel> jobDelete( @Body JobDeleteRequestModel model);

正在收到此错误:

非正文HTTP方法不能包含@Body或@TypedOutput

谁能帮助我摆脱困境?

trans by 2020-02-02T07:05:08Z

改造2:从响应正文获取JSON

我想使用翻新2从我的api中获取字符串json,当使用翻新1来获取此json时我没有问题,但是使用翻新2为我返回null。

这就是我的json的样子

{"id":1,"Username":"admin","Level":"Administrator"}

这是我的API

@FormUrlEncoded
@POST("/api/level")
Call<ResponseBody> checkLevel(@Field("id") int id);

这就是我的代码的样子

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Config.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        Api api = retrofit.create(Api.class);
        Call<ResponseBody> call = api.checkLevel(1);
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                JsonObject post = new JsonObject().get(response.body().toString()).getAsJsonObject();
                    if (post.get("Level").getAsString().contains("Administrator")) {

                    }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
            }
        });

我是不熟悉2并使用上面的代码的新手,因为response.body().toString()返回null,它总是使我的应用程序崩溃。

请指导我如何获取该json字符串,以便可以将其转换为JsonObject。

trans by 2020-01-16T22:01:52Z

java-Retrofit 2-URL查询参数

我正在使用查询参数来设置Google Maps API所需的值。

问题是我不需要第一个查询参数&符号。

@GET("/maps/api/geocode/json?")
    Call<JsonObject> getLocationInfo(@Query("address") String zipCode,
                                             @Query("sensor") boolean sensor,
                                             @Query("client") String client,
                                             @Query("signature") String signature);

改造产生:

&address=90210&sensor=false&client=gme-client&signature=signkey

这会在我需要时导致呼叫失败

address=90210&sensor=false&client=gme-client&signature=signkey

我该如何解决?

trans by 2020-01-16T09:20:59Z

android-未找到Retrofit批注。 (参数1)

我想从带有proguard.cfg的URL获取RSS代码,如果我在get批注中静态输入url,一切都很好,但是使用动态url时会出错。

我的界面服务:

public interface AllNewsService {
@GET("/fa/rss/{url}")
void getRss( @Path("url") String nGroup ,  Callback<AllNewsRss> callback);}

并调用getRss方法:

DataGetter dg = new DataGetter();
    dg.get().getRss("allnews" ,new Callback<AllNewsRss>() {
        @Override
        public void success(AllNewsRss allNewsRss, Response response) {
            Log.d(TAG,"success");
        }

        @Override
        public void failure(RetrofitError error) {
            Log.d("*********",error.toString());
        }

我收到以下错误:

retrofit.RetrofitError: AllNewsService.getRss: No Retrofit annotation found. (parameter #1)

注意:我在proguard.cfg的下面添加了行,但是没有用

-keep class retrofit.** { *; }
trans by 2020-01-15T03:12:32Z

Java-Retrofit2 Android:应为BEGIN_ARRAY,但位于第1行第2列路径的BEGIN_OBJECT $

我知道这不是第一次有人问这个问题,但是有了Retrofit2,我找不到合适的解决方案。 我遵循了在线教程,效果很好。 当我将相同的代码应用于自己的端点时,出现以下异常:java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $我不知道该如何解决。

接口:

public interface MyApiService {

// Is this right place to add these headers?
@Headers({"application-id: MY-APPLICATION-ID",
        "secret-key: MY-SECRET-KEY",
        "application-type: REST"})
@GET("Music")
Call<List<Music>> getMusicList();



Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(MySettings.REST_END_POINT)
        .addConverterFactory(GsonConverterFactory.create())
        .build();
}

客户代码:

MyApiService service = MyApiService.retrofit.create(MyApiService.class);
Call<List<Music>> call = service.getMusicList();
call.enqueue(new Callback<List<Music>>() {

    @Override
    public void onResponse(Call<List<Music>> call, Response<List<Music>> response) {
        Log.e("MainActivity", response.body().
    }

    @Override
    public void onFailure(Call<List<Music>> call, Throwable t) {
        Log.e("MainActivity", t.toString());
    }
});

此代码与此有效负载一起使用:

[
{
    "login": "JakeWharton",
    "id": 66577,
    "avatar_url": "https://avatars.githubusercontent.com/u/66577?v=3",
    "gravatar_id": "",
    "url": "https://api.github.com/users/JakeWharton",
    "html_url": "https://github.com/JakeWharton",
    "followers_url": "https://api.github.com/users/JakeWharton/followers",
    "following_url": "https://api.github.com/users/JakeWharton/following{/other_user}",
    "gists_url": "https://api.github.com/users/JakeWharton/gists{/gist_id}",
    "starred_url": "https://api.github.com/users/JakeWharton/starred{/owner}{/repo}",
    "subscriptions_url": "https://api.github.com/users/JakeWharton/subscriptions",
    "organizations_url": "https://api.github.com/users/JakeWharton/orgs",
    "repos_url": "https://api.github.com/users/JakeWharton/repos",
    "events_url": "https://api.github.com/users/JakeWharton/events{/privacy}",
    "received_events_url": "https://api.github.com/users/JakeWharton/received_events",
    "type": "User",
    "site_admin": false,
    "contributions": 741
},
{....

但与此不:

{
"offset": 0,
"data": [
    {
        "filename": "E743_1458662837071.mp3",
        "created": 1458662854000,
        "publicUrl": "https://api.backendless.com/dbb77803-1ab8-b994-ffd8-65470fa62b00/v1/files/music/E743_1458662837071.mp3",
        "___class": "Music",
        "description": "",
        "likeCount": 0,
        "title": "hej Susanne. ",
        "ownerId": "E743756F-E114-6892-FFE9-BCC8C072E800",
        "updated": null,
        "objectId": "DDD8CB3D-ED66-0D6F-FFA5-B14543ABC800",
        "__meta": "{\"relationRemovalIds\":{},\"selectedProperties\":[\"filename\",\"created\",\"publicUrl\",\"___class\",\"description\",\"likeCount\",\"title\",\"ownerId\",\"updated\",\"objectId\"],\"relatedObjects\":{}}"
    },
    {...

我的音乐课:

public class Music {

   private String ownerId;
   private String filename;
   private String title;
   private String description;
   private String publicUrl;
   private int likeCount;

   // Getters & Setters

}
trans by 2020-01-14T11:39:51Z

android-javax.net.ssl.SSLException:读取错误:ssl = 0x9524b800:系统调用期间I / O错误,由p重置连接

在过去的几周中,我们的客户开始看到数百个此类“ SSLException错误-对等重置连接”,我不知道为什么

  1. 我们在okhttp上使用Retrofit,没有特殊配置

    public class OkHttpClientProvider implements IOkHttpClientProvider {
    
        OkHttpClient okHttpClient;
    
        public OkHttpClientProvider() {
            this.okHttpClient = createClient();
        }
    
        public OkHttpClient getOkHttpClient() {
            return this.okHttpClient;
        }
    
        private OkHttpClient createClient() {
            return new OkHttpClient();
        }
    }
    

上面的客户提供者是一个单例。 RestAdapter是使用此注入的客户端(我们使用匕首)构建的-

RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder()
                                        .setConverter(converter)
                                        .setEndpoint(networkRequestDetails.getServerUrl())
                                        .setClient(new OkClient(okHttpClientProvider.getOkHttpClient()))
                                        .setErrorHandler(new NetworkSynchronousErrorHandler(eventBus))
                                        );

根据堆栈溢出解决方案,我发现了-

  1. 服务器上的存活时间为180秒,OkHttp的默认保留时间为300秒

  2. 服务器在其标头中返回“ Connection:close”,但客户端请求发送“ Connection:keepAlive”

  3. 服务器支持TLS 1.0 / 1.1 / 1.2并使用Open SSL

  4. 我们的服务器最近已移至其他地区的另一个托管服务提供商,所以我不知道这些是否是DNS故障

  5. 我们尝试调整诸如keepAlive,在服务器上重新配置的OpenSSL之类的内容,但是由于某些原因,Android客户端不断出现此错误

  6. 当您尝试使用该应用发布内容或拉动刷新时,它会立即发生而没有任何延迟(它甚至不会进入网络或在此异常发生之前会出现延迟,这暗示连接已断开)。 但是尝试多次以某种方式“修复”它,我们就获得了成功。 以后再发生

  7. 我们已经使服务器上的DNS条目无效,以查看是否是引起此错误的原因,但这并没有帮助

  8. 它主要发生在LTE,但我也在Wifi上看到过

我不想禁用保持活动状态,因为大多数现代客户都不会这样做。 另外,我们使用的是OkHttp 2.4,这在后期冰淇淋三明治设备上是一个问题,因此我希望它可以解决这些潜在的网络问题。 iOS客户端也会遇到这些异常,但减少了近100倍(iOS客户端使用AFNetworking 2.0)。 我正在努力寻找新的东西来尝试,有什么帮助/想法吗?

更新-通过okhttp添加完整的堆栈跟踪

      retrofit.RetrofitError: Read error: ssl=0x9dd07200: I/O error during system call, Connection reset by peer
              at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:390)
              at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240)
              at java.lang.reflect.Proxy.invoke(Proxy.java:397)
              at $Proxy15.getAccessTokenUsingResourceOwnerPasswordCredentials(Unknown Source)
              at com.company.droid.repository.network.NetworkRepository.getAccessTokenUsingResourceOwnerPasswordCredentials(NetworkRepository.java:76)
              at com.company.droid.ui.login.LoginTask.doInBackground(LoginTask.java:88)
              at com.company.droid.ui.login.LoginTask.doInBackground(LoginTask.java:23)
              at android.os.AsyncTask$2.call(AsyncTask.java:292)
              at java.util.concurrent.FutureTask.run(FutureTask.java:237)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
              at java.lang.Thread.run(Thread.java:818)
       Caused by: javax.net.ssl.SSLException: Read error: ssl=0x9dd07200: I/O error during system call, Connection reset by peer
              at com.android.org.conscrypt.NativeCrypto.SSL_read(Native Method)
              at com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:699)
              at okio.Okio$2.read(Okio.java:137)
              at okio.AsyncTimeout$2.read(AsyncTimeout.java:211)
              at okio.RealBufferedSource.indexOf(RealBufferedSource.java:306)
              at okio.RealBufferedSource.indexOf(RealBufferedSource.java:300)
              at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196)
              at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:191)
              at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:80)
              at com.squareup.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:917)
              at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:793)
              at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:439)
              at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:384)
              at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:497)
              at com.squareup.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
              at com.squareup.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:25)
              at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:73)
              at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38)
              at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321)
              at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240)
              at java.lang.reflect.Proxy.invoke(Proxy.java:397)
              at $Proxy15.getAccessTokenUsingResourceOwnerPasswordCredentials(Unknown Source)
              at com.company.droid.repository.network.NetworkRepository.getAccessTokenUsingResourceOwnerPasswordCredentials(NetworkRepository.java:76)
              at com.company.droid.ui.login.LoginTask.doInBackground(LoginTask.java:88)
              at com.company.droid.ui.login.LoginTask.doInBackground(LoginTask.java:23)
              at android.os.AsyncTask$2.call(AsyncTask.java:292)
              at java.util.concurrent.FutureTask.run(FutureTask.java:237)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
              at java.lang.Thread.run(Thread.java:818)
      ]}
trans by 2020-01-13T11:14:54Z

如何在翻新(Android)中动态设置标题

我使用的API使用的授权方案要求设置特殊的“ X-Authorization”标头来验证请求。 例如,此改造设置非常适合身份验证令牌为Error:(41, 34) error: element value must be a constant expression的用户:

@Headers("X-Authorization: abc123")
@GET("/posts")
Observable<List<Post>> get_posts();

我缓存了用户的X-Authorization令牌,因此可以访问它,但是,我不能只将其放在@Headers声明中。

@Headers("X-Authorization: " + token)
@GET("/posts")
Observable<List<Post>> get_posts();

我在这里遇到编译错误:Error:(41, 34) error: element value must be a constant expression

关于如何解决这个问题的任何想法?

trans by 2020-01-11T17:59:02Z

单元测试翻新api调用如何?

我正在尝试为每个可能的代码块集成单元测试用例。但是我在添加通过改型进行的api调用的测试用例时遇到了问题。

JUnit编译器从不执行CallBack函数中的代码。

还有另一个选项可以使所有api调用都出于测试目的而同步,但这并不是在我的应用程序中的所有情况下都可行。

我该如何解决呢? 我必须以任何方式在api调用中添加测试用例。

trans by 2020-01-07T23:19:51Z

android-改造:@GET命令中有多个查询参数?

我正在使用Retrofit和Robospice在我的android应用程序中进行API调用。 所有@POST方法都很好用,URL中没有任何参数的@GET命令也是如此,但是最后我无法获得任何@GET调用来使用参数!

例如,如果我的API路径是“ my / api / call /”,并且我想在URL中使用2个参数“ param1”和“ param2”,则get调用将类似于:

[http://www.example.com/my/api/call?param1=value1&param2=value2]

所以我像这样设置了我的@GET接口:

@GET("/my/api/call?param1={p1}&param2={p2}")
Response getMyThing(@Path("p1")
String param1, @Path("p2")
String param2);

但我说错了
“在请求网络执行期间发生异常:方法getMyThing上的URL查询字符串“ /my/api/call?param1={p1}&param2={p2}”可能尚未替换块。

我究竟做错了什么?

trans by 2020-01-04T10:50:00Z

java-不支持的操作:Android,Retrofit,OkHttp。 在OkHttpClien中添加拦截器

我正在尝试使用拦截器通过Android中的Retrofit 2.0-beta3和OkHttpClient添加基于令牌的身份验证。 但是当我在OkHttpClient中添加拦截器时,我得到UnsupportedOperationException。这是我的代码:在ApiClient.java中

public static TrequantApiInterface getClient(final String token) {
        if( sTreqantApiInterface == null) {

            Log.v(RETROFIT_LOG, "Creating api client for the first time");
            OkHttpClient okClient = new OkHttpClient();

            okClient.interceptors().add(new Interceptor() {
                @Override
                public Response intercept(Interceptor.Chain chain) throws IOException {
                    Request original = chain.request();

                    // Request customization: add request headers
                    Request.Builder requestBuilder = original.newBuilder()
                            .header("Authorization", token)
                            .method(original.method(), original.body());

                    Request request = requestBuilder.build();
                    return chain.proceed(request);
                }
            });

            Retrofit client = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .client(okClient)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            sTreqantApiInterface = client.create(TrequantApiInterface.class);
        }
        return sTreqantApiInterface;
    }

我像这样使用它:

private void ampFreqTest(){
    String token = getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE)
                        .getString(getString(R.string.key_token), "");

    service = ApiClient.getClient(token);
    //I get an exception on this line:
    Call<List<AmpFreq>> call = service.getUserAmpFreq("1");
    call.enqueue(new Callback<List<AmpFreq>>() {
        @Override
        public void onResponse(Response<List<AmpFreq>> response) {
            Toast.makeText(HomeScreen.this, "Got result", Toast.LENGTH_LONG);

            Log.v(ApiClient.RETROFIT_LOG, "Success api client." + response.message());
            Log.v(ApiClient.RETROFIT_LOG, "Success api client.");
        }
        @Override
        public void onFailure(Throwable t) {
            Toast.makeText(HomeScreen.this, t.getMessage() , Toast.LENGTH_LONG);
            Log.v(ApiClient.RETROFIT_LOG, "Fail api client." + t.getMessage() );
        }
    });
}

但是我得到这个错误:

Process: com.trequant.usman.trequant_android, PID: 14400
java.lang.UnsupportedOperationException at java.util.Collections$UnmodifiableCollection.add(Collections.java:932)
 at com.trequant.usman.trequant_android.api.ApiClient.getClient(ApiClient.java:41)

它给我增加一个新的拦截器的错误,说它不是modifiableCollection,但是interceptors()函数的文档说:/ **

   * Returns a modifiable list of interceptors that observe the full span of each call: from before
   * the connection is established (if any) until after the response source is selected (either the
   * origin server, cache, or both).
   */

我究竟做错了什么? 可能是错误吗?

trans by 2020-01-01T07:05:29Z

java-是否可以使用Retrofit 2向每个请求添加查询参数?

我需要向Retrofit 2.0.0-beta2库发出的每个请求添加查询参数。 我为Retrofit 1.9找到了此解决方案,但是如何在最新的库版本中添加RequestInterceptor

我的界面:

@GET("user/{id}")
Call<User> getUser(@Path("id")long id);

@GET("users/")
Call<List<User>> getUser();

客户:

Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(CLIENT)  // custom OkHTTP Client
                    .build();
service = retrofit.create(userService.class);
trans by 2019-12-30T03:46:28Z

ssl-CertPathValidatorException:找不到证书路径的信任锚-改装Android

我正在创建一个使用CertPathValidatorException : Trust anchor for certificate path not found与服务器通信的android应用程序。 我正在使用retrofitOkHttp发出请求。 对于标准http请求,这些工作正常。 以下是我遵循的步骤。

步骤1 :使用以下命令从服务器获取证书文件

echo -n | openssl s_client -connect api.****.tk:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > gtux.cert

第2步 :使用以下命令将证书转换为BKS格式

keytool -importcert -v -trustcacerts -file "gtux.cert" -alias imeto_alias -keystore "my_keystore.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-146.jar" -storetype BKS

它要求我输入密码,文件已成功创建。

第三步:

创建一个OkHttpClient并将其用于发出https请求

public class MySSLTrust {
public static OkHttpClient trustcert(Context context){
    OkHttpClient okHttpClient = new OkHttpClient();
    try {
        KeyStore ksTrust = KeyStore.getInstance("BKS");
        InputStream instream = context.getResources().openRawResource(R.raw.my_keystore);
        ksTrust.load(instream, "secret".toCharArray());
        // TrustManager decides which certificate authorities to use.
        TrustManagerFactory tmf = TrustManagerFactory
                .getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ksTrust);
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, tmf.getTrustManagers(), null);
        okHttpClient.setSslSocketFactory(sslContext.getSocketFactory());
    } catch (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException | KeyManagementException e) {
        e.printStackTrace();
    }
    return okHttpClient;
}
}

步骤4:

必须创建RestAdapter

RestAdapter.Builder()
.setRequestInterceptor(intercept)
.setEndpoint("https://api.****.tk")
.setClient(new OkClient(this))
.setLogLevel(RestAdapter.LogLevel.FULL)
.setLog(new AndroidLog("RETROFIT"))
.build();

但是,最终在运行该应用程序时,它会抛出CertPathValidatorException : Trust anchor for certificate path not found。请帮助我解决此问题。 谢谢。

其他失败尝试:试图在我的Xperia Z2中安装证书,它说文件已安装,但是当我运行该应用程序时,会引发相同的异常。

错误记录这是我执行的错误日志...

错误记录

粘贴在那里,以便于阅读。

trans by 2019-12-29T13:52:57Z

改装转换器工厂无法访问GsonConverterFactory

我已经将这些依赖项包括到我的项目中:

编译'com.squareup.retrofit:retrofit:2.0.0-beta2'
编译'com.squareup.retrofit:converter-gson:2.0.0-beta1'

我有一堂课,我将通过改造来访问我的api:

 public static  <S> S createService(Class<S> serviceClass, String baseUrl) {


        Retrofit builder = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .build();    

            RestAdapter adapter = builder.build();*/

        return  builder.create(serviceClass);
    }

现在,它给了我这个编译时错误:

错误:(24,17)错误:类生成器中的方法addConverterFactory   不能应用于给定类型; 要求:工厂发现:   GsonConverterFactory原因:实际参数GsonConverterFactory   无法通过方法调用转换转换为Factory

我该如何解决? 我遵循了文档。 怎么了?

trans by 2019-12-26T00:38:08Z

android-实施Retrofit回调以重新创建活动的最佳实践?

我将改用Retrofit,并尝试了解将其与异步回调一起使用的正确体系结构。

例如,我有一个接口:

interface RESTService{
    @GET("/api/getusername")
    void getUserName(@Query("user_id") String userId, 
                     Callback<Response> callback);
}

我从主要活动中运行它:

RestAdapter restAdapter = new RestAdapter.Builder()
        .setServer("WEBSITE_URL")     
        .build();
RESTService api = restAdapter.create(RESTService.class);
api.getUserName(userId, new Callback<Response> {...});

然后用户旋转设备,我有了新创建的活动...在这里发生了什么? 如何获得对新活动的响应(我假设在后台进行的api调用的执行时间将比第一个活动寿命长)。 也许我必须使用静态的回调实例还是什么? 请告诉我正确的方法...

trans by 2019-09-26T08:02:33Z

1 2 3 下一页 共3页