标签: okhttp

Retrofit是否有'ResponseInterceptor'(作为其对应的RequestInterceptor)组件?

我正在使用Retrofit及其大部分组件,如ErrorHandler,Callbacks和RequestInterceptor等.但我错过了像'ResponseInterceptor'这样的东西,它允许我以通用的方式过滤或读取响应中的标题,作为中心点,而不必为每个服务调用设置回调.这是目前我知道如何实现这一目标的唯一方法,但不得不在非常服务调用上显式传递回调对象.

我想要的是对任何存在特定标头的响应采取行动,因此它就像一个分析每个响应的通用对象('ResponseInterceptor').

有这样的事吗?或者更好的想法如何实现这一点,而无需在每个服务调用上设置一个Callback对象?

提前致谢!

android retrofit okhttp

1
推荐指数
1
解决办法
349
查看次数

在Eclipse中导入Picasso和OkHttp

我需要暴露一些Picasso资源来满足一个相当奇怪的请求.为此我需要将Picasso导入为库项目而不是编译的jar.我创建了一个新的Android项目,并将picasso\picasso\src\main\java(克隆主文件)的内容复制到src文件夹中.Picasso使用OkHttp,所以我下载了最新版本的jar(2.3.0)并将其放在Picasso项目的l​​ibs文件夹中; 将它添加到构建路径; 在构建路径"Order and Export"首选项中选择了jar.最后,我将Picasso项目作为一个库并将其包含在主项目中(也从libs中删除了旧的Picasso jar).

应用程序第一次尝试发出Picasso请求时,我得到以下异常:

04-12 17:04:15.956: E/AndroidRuntime(5436): java.lang.NoClassDefFoundError: com.squareup.okhttp.internal.DiskLruCache$4
04-12 17:04:15.956: E/AndroidRuntime(5436):     at com.squareup.okhttp.internal.DiskLruCache.<clinit>(DiskLruCache.java:810)
04-12 17:04:15.956: E/AndroidRuntime(5436):     at com.squareup.okhttp.Cache.<init>(Cache.java:168)
04-12 17:04:15.956: E/AndroidRuntime(5436):     at com.squareup.picasso.OkHttpDownloader.<init>(OkHttpDownloader.java:77)
04-12 17:04:15.956: E/AndroidRuntime(5436):     at com.squareup.picasso.OkHttpDownloader.<init>(OkHttpDownloader.java:55)
04-12 17:04:15.956: E/AndroidRuntime(5436):     at com.squareup.picasso.OkHttpDownloader.<init>(OkHttpDownloader.java:45)
04-12 17:04:15.956: E/AndroidRuntime(5436):     at com.squareup.picasso.Utils$OkHttpLoaderCreator.create(Utils.java:424)
04-12 17:04:15.956: E/AndroidRuntime(5436):     at com.squareup.picasso.Utils.createDefaultDownloader(Utils.java:250)
04-12 17:04:15.956: E/AndroidRuntime(5436):     at com.squareup.picasso.Picasso$Builder.build(Picasso.java:832)
04-12 17:04:15.956: E/AndroidRuntime(5436):     at com.squareup.picasso.Picasso.with(Picasso.java:662)
Run Code Online (Sandbox Code Playgroud)

指定的类似乎在jar中,但DiskLruCache.java似乎分为9个类文件:

$ ls DiskLruCache*
DiskLruCache$1.class  DiskLruCache$4.class         DiskLruCache$Entry.class
DiskLruCache$2.class  DiskLruCache$Editor$1.class  DiskLruCache$Snapshot.class
DiskLruCache$3.class  DiskLruCache$Editor.class    DiskLruCache.class
Run Code Online (Sandbox Code Playgroud)

我准备提供更多信息.任何建议都将受到高度赞赏.

编辑:

问题似乎出现在OkHttp jar中.我试图在主项目中导入它和Picasso jar(最新版本 - 2.5.2)并得到相同的例外.我没有看到任何OkHttp警告,表明一些其他线程中所述的不兼容性.

eclipse import android picasso okhttp

1
推荐指数
1
解决办法
2853
查看次数

Error Parse 1.9.3和OkHTTP 2.0.0

当我在同一个项目中使用Parse(Parse-1.9.3.jar)和OkHTTP版本2.0.0的1.9.3版时,我收到此错误:

java.lang.NoSuchMethodError: No virtual method setFollowRedirects(Z)V in class Lcom/squareup/okhttp/OkHttpClient; or its super classes (declaration of 'com.squareup.okhttp.OkHttpClient' appears in /data/app/XXXXXXXXXXX/base.apk:classes2.dex)
Run Code Online (Sandbox Code Playgroud)

当我将Parse降级到1.9.2时,一切正常.知道如何解决这个问题吗?

android parse-platform okhttp

1
推荐指数
1
解决办法
1047
查看次数

Okhttp - OkHttpClient 2.0.0无法解析方法拦截器()

我使用Retrofit 1.9.0和OkHttp 2.0.0

compile 'com.squareup.okhttp:okhttp:2.0.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'
Run Code Online (Sandbox Code Playgroud)

但是没有找到拦截器方法

OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(50000, TimeUnit.MILLISECONDS);
client.setReadTimeout(50000, TimeUnit.MILLISECONDS);
client.interceptor().add(...); // cannot resolve method interceptor
Run Code Online (Sandbox Code Playgroud)

我正在处理改造中的重试请求,这篇文章建议 如何使用OkHttp/Retrofit重试HTTP请求?

我在这里错过了一些图书馆吗?

android retrofit okhttp

1
推荐指数
1
解决办法
3928
查看次数

如何解决java.lang.NoClassDefFoundError:okio.Okio?

我有一个运行良好的应用程序,但是有时在向程序中添加一些类和代码时,我的应用程序会崩溃。在我的logcat中,错误是这样的:

 8871-8929/com.example.first E/AndroidRuntime? FATAL EXCEPTION: pool-4-thread-1
java.lang.NoClassDefFoundError: okio.Okio
    at com.squareup.okhttp.internal.http.HttpConnection.<init>    (HttpConnection.java:90)
    at com.squareup.okhttp.Connection.connectSocket(Connection.java:208)
    at com.squareup.okhttp.Connection.connect(Connection.java:172)
    at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:367)
    at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)
    at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328)
    at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:245)
    at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:438)
    at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:389)
    at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:233)
Run Code Online (Sandbox Code Playgroud)

我的gradle:

dependencies {
 compile fileTree(dir: 'libs', include: ['*.jar'])
 compile 'com.android.support:support-v4:23.1.+'
 compile 'com.google.android.gms:play-services:3.2.+'
 compile 'net.hockeyapp.android:HockeySDK:3.6.+'
 compile 'com.googlecode.mp4parser:isoparser:1.0.+'
 compile 'com.android.support:appcompat-v7:23.1.0'
 compile 'com.android.support:design:23.1.1'
 compile 'com.android.support:cardview-v7:23.1.0'
 compile 'com.android.support:recyclerview-v7:23.0.1'
 compile 'com.github.bumptech.glide:glide:+'
 compile 'com.nineoldandroids:library:2.4.+'
  compile 'com.koushikdutta.ion:ion:2.+'
 compile 'de.greenrobot:eventbus:2.4.0'
 compile 'com.github.dmytrodanylyk.circular-progress-button:library:1.1.3'
 compile 'com.theartofdev.edmodo:android-image-cropper:1.0.+'
 compile 'com.squareup.picasso:picasso:2.5.2'
 compile 'com.squareup.okhttp:okhttp-urlconnection:2.7.5'
 compile 'com.github.rahatarmanahmed:circularprogressview:2.4.0'
 compile 'com.makeramen:roundedimageview:2.1.2'
 compile 'com.squareup.okio:okio:1.6.0'
}
Run Code Online (Sandbox Code Playgroud)

android web-services okhttp okio

1
推荐指数
1
解决办法
5245
查看次数

如何在Android中使用setCache进行在线数据OkHttpClient

我想表明3 fragments在我Activity和加载数据从json任何fragments!我需要将网站数据显示RecyclerviewOkHTTP v3库中.
我想将此数据显示为离线,我的意思是,如果用户关闭数据/ wifi,则显示此数据以供离线使用.但我不想使用SQLite数据库!
对于这个想法,我使用okHttpClient cache,但找不到setCache客户端,并告诉我这个错误:图像链接

MainActivity代码:

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private ArrayList<AndroidVersion> data;
    private DataAdapter adapter;
    private static Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        context = this;

        initViews();
    }

    private void initViews() {
        recyclerView = (RecyclerView) findViewById(R.id.card_recycler_view);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(layoutManager);
        loadJSON();
    }

    private void loadJSON() …
Run Code Online (Sandbox Code Playgroud)

android okhttp

1
推荐指数
1
解决办法
2067
查看次数

okhttp和HttpURLConnection之间的关系

很多人跟我说HttpURLConnection是基于android 4.4上的okhttp.

但是当我深入研究okhttp的代码时,OkHttpURLConnection是一个从HttpURLConnection扩展而来的子类.

那么,okhttp是基于HttpURLConnection还是HttpURLConnection基于okhttp?

我发现HttpURLConnection的工具来自rt.jar,它来自jdk.

我希望有人能告诉我okhttp和HttpURLConnection之间真正的关系

java android http okhttp

1
推荐指数
1
解决办法
928
查看次数

在Android上的OkHttp

这是我从PHP服务器获取JSON字符串的代码.

当我运行这个应用程序崩溃,并说有一个错误, Response response = client.newCall(request).execute(); 我做错了什么?

public class MainActivity extends Activity {

    //private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new AsyncTask<Void, Void, String>(){

            @Override
            protected String doInBackground(Void... params) {

                OkHttpClient client = new OkHttpClient();
                Request request = new Request.Builder()
                        .url(url)
                        .build();

                try {
                    Response response = client.newCall(request).execute();
                    Log.d("OkHttp", "doInBackground() called with: " + "params = [" + response.body().string() + "]");
                    return response.body().string();
                } 
                catch (IOException e) {
                    e.printStackTrace();
                }
                return null; …
Run Code Online (Sandbox Code Playgroud)

android okhttp

1
推荐指数
1
解决办法
400
查看次数

如何更快地提出OkHttp请求?

我发出POST请求以保护服务器,这需要相当长的时间.我想让它更快.有机会这样做吗?它看起来像这样:

  private class GetTokenTask extends AsyncTask<Void, Void, String> {

    private final String LOG_TAG = MainActivity.class.getSimpleName();

    private Call mCallToServer;
    private String mAccessToken;
    private OkHttpClient mHttpClient;
    private JSONObject mResponseJSON;
    private Response mResponseFromServer;

    @Override
    protected String doInBackground(Void... params) {
      mHttpClient = new OkHttpClient();

      mCallToServer = mHttpClient.newCall(requestToOAuth());
      try {
        mResponseFromServer = mCallToServer.execute();
        mResponseJSON = new JSONObject(mResponseFromServer.body().string());
        mAccessToken = mResponseJSON.getString(getString(R.string.access_token_key));

        Log.i(LOG_TAG, mAccessToken);
        Log.i(LOG_TAG, JWTUtils.decoded(mAccessToken));
      } catch (Exception e) {
        e.printStackTrace();
      }
      return mAccessToken;
    }

    @Override
    protected void onPostExecute(String token) {
      super.onPostExecute(token);
    }
  } …
Run Code Online (Sandbox Code Playgroud)

post android android-asynctask okhttp

1
推荐指数
1
解决办法
1251
查看次数

如何使用okhttp进行异步调用以将响应返回到主线程?

我正在尝试为Android编写程序,并且使用okhttp进行json调用。我真的很想将我的回复返回到正在创建的线程之外。我需要为异步调用创建线程,否则会得到NetworkOnMainThreadException。问题是,即使我的responseString是类中的全局变量,我的响应字符串似乎也无法从“ onResponse”方法之外获取。由于它是异步的,因此线程不会及时运行以在返回之前在全局变量中获取我的值。在返回responseString值之前,如何确保获得响应?

这是我的代码:

public static String getUserProductCategoriesFromServer(Activity activity, final String UID, final String EXPIRY, final String CLIENT, final String ACCESSTOKEN)
{
    activity.runOnUiThread(new Runnable()
    {
        @Override
        public void run()
        {
            final OkHttpClient client = new OkHttpClient();
            final Request request = new Request.Builder()
                    .url(JsonStorage.getJsonUserProductCategories())
                    .get()
                    .addHeader("access-token", ACCESSTOKEN)
                    .addHeader("client", CLIENT)
                    .addHeader("expiry", EXPIRY)
                    .addHeader("uid", UID)
                    .build();



            client.newCall(request).enqueue(new Callback()
            {
                @Override
                public void onFailure(Call call, IOException e)
                {

                }

                @Override
                public void onResponse(Call call, Response response) throws IOException
                {
                    try
                    {
                        response = client.newCall(request).execute();
                        String …
Run Code Online (Sandbox Code Playgroud)

java android json asynchronous okhttp

1
推荐指数
1
解决办法
1896
查看次数