2015-08-07 2 views
0

Я пытаюсь получить OkHttp работать в моем проекте Android студии, я создал класс и вставить следующий код здесь: https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/com/squareup/okhttp/recipes/ParseResponseWithGson.javaOkHttp Request не является общедоступным в com.squareup.okhttp; не могут быть доступны из вне пакета

package com.my.project; 

/** 
* Created by me on 07/08/2015. 
*/ 
import com.google.gson.Gson; 
import com.squareup.okhttp.OkHttpClient; 
import com.squareup.okhttp.Request; 
import com.squareup.okhttp.Response; 
import java.io.IOException; 
import java.util.Map; 

public final class ParseResponseWithGson { 
private final OkHttpClient client = new OkHttpClient(); 
private final Gson gson = new Gson(); 

public void run() throws Exception { 
    Request request = new Request.Builder() 
      .url("https://api.github.com/gists/c2a7c39532239ff261be") 
      .build(); 
    Response response = client.newCall(request).execute(); 
    if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); 

    Gist gist = gson.fromJson(response.body().charStream(), Gist.class); 
    for (Map.Entry<String, GistFile> entry : gist.files.entrySet()) { 
     System.out.println(entry.getKey()); 
     System.out.println(entry.getValue().content); 
    } 
} 

static class Gist { 
    Map<String, GistFile> files; 
} 

static class GistFile { 
    String content; 
} 

public static void main(String... args) throws Exception { 
    new ParseResponseWithGson().run(); 
} 
} 

Вот мой Gradle файл:

apply plugin: 'com.android.application' 

repositories { 
    jcenter() 
    flatDir { 
     dirs 'prebuilt-libs' 
    } 
} 

android { 
    compileSdkVersion "Google Inc.:Glass Development Kit Preview:19" 
    buildToolsVersion "22.0.1" 

    defaultConfig { 
     applicationId "com.my.project_02" 
     minSdkVersion 19 
     targetSdkVersion 22 
     versionCode 2 
     versionName "0.2" 
    } 

    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
compile fileTree(include: ['*.jar'], dir: 'libs') 
compile 'com.google.code.gson:gson:2.3.1' 
compile 'com.squareup.okio:okio:1.5.0' 
compile 'com.squareup.okhttp:okhttp:2.4.0' 
compile files('libs/GlassVoice-xe22.jar') 

} 

но ошибки "Error: (8, 27) ошибка: Запрос не является публичной в com.squareup.okhttp, не могут быть доступны из вне пакета" и «Error: (9, 27) ошибка: Ответ является не публично в com.squareup.okhttp; невозможно получить доступ из внешнего пакета "встречаются в классе ParseResponseWithGson для кода:

import com.squareup.okhttp.Request; 
import com.squareup.okhttp.Response; 

Кто-нибудь знает, как я могу исправить эти ошибки? Похоже, что конструктор не является публичным, но это звучит странно, однако я скопировал и вставил код, поэтому я не уверен, что я мог бы сделать неправильно, если только некорректная версия OkHttp и OkIo не упоминается?

+0

Кажется, что конструктор запроса (https://github.com/square/okhttp/blob/master/okhttp/src/main/java/com/squareup/okhttp/Request.java) и ответ являются частными, что объясняет, почему происходит ошибка, но я не понимаю, почему примерный код не был обновлен, если это проблема с примером, особенно учитывая, что это похоже на популярную библиотеку, поэтому я предполагаю, что у меня нет реализовано это правильно, но не имеет представления о том, что отсутствует/не было выполнено правильно. –

ответ

0

Похоже, что строка compile files('libs/GlassVoice-xe22.jar') вызывала проблему, я думаю, она содержит устаревшую версию OkHttp, потому что, как только я удалил эту строку, код работал нормально.

0

Возможно, у вас есть еще одна, устаревшая версия OkHttp на вашем пути к классу. Этот запрос старой версии не был общедоступным, но тот, который находится в версии 2.0+.

Попробуйте использовать jar tvf libs/foo.jar для каждой банки в вашем каталоге libs, чтобы ее найти!

+0

FYI, отправил ответ. Я не знал, как использовать 'jar tvf libs/foo.jar' для каждого jar в каталоге libs. Я понял, что вы означали, что foo.jar следует заменить именем jar, и я предположил, что вышеупомянутая команда должна быть записана в Терминале, а текущий каталог терминала должен быть каталогом libs, но не знал, какой вид вывода следует ожидать , Когда я попытался понять это, ошибка «jar» не распознается как внутренняя или внешняя команда ». Просто напишите эту обратную связь, если она может помочь кому угодно. Ваш комментарий указал мне в правильном направлении –

Смежные вопросы