JAVA_HOME Переменные среды [дубликат]

На этот вопрос уже много замечательных ответов, но с тех пор, как эти ответы были опубликованы, появилось много замечательных библиотек.

Я рассмотрю несколько вариантов использования сетевых операций и a решение или два для каждого.

ReST over HTTP

Обычно Json может быть XML или что-то еще

Полный доступ к API

Предположим, вы пишете приложение что позволяет пользователям отслеживать цены акций, процентные ставки и курсы обмена валют. Вы найдете Json API, который выглядит примерно так:

http://api.example.com/stocks                       //ResponseWrapper object containing a list of Srings with ticker symbols
http://api.example.com/stocks/$symbol               //Stock object
http://api.example.com/stocks/$symbol/prices        //PriceHistory object
http://api.example.com/currencies                   //ResponseWrapper object containing a list of currency abbreviation
http://api.example.com/currencies/$currency         //Currency object
http://api.example.com/currencies/$id1/values/$id2  //PriceHistory object comparing the prices of the first currency (id1) to the second (id2)

Retrofit from Square

Это отличный выбор для API с несколькими конечными точками и позволяет объявлять конечные точки REST вместо того, чтобы кодировать их отдельно, как с другими библиотеками, такими как ион или волейбол. (веб-сайт: http://square.github.io/retrofit/ )

Как вы используете его с API финансов?

build.gradle

Добавьте эти строки на уровень вашего модуля buid.gradle:

implementation 'com.squareup.retrofit2:retrofit:2.3.0' //retrofit library, current as of September 21, 2017
implementation 'com.squareup.retrofit2:converter-gson:2.3.0' //gson serialization and deserialization support for retrofit, version must match retrofit version

FinancesApi.java

public interface FinancesApi {
    @GET("stocks")
    Call> listStocks();
    @GET("stocks/{symbol}")
    Call getStock(@Path("symbol")String tickerSymbol);
    @GET("stocks/{symbol}/prices")
    Call> getPriceHistory(@Path("symbol")String tickerSymbol);

    @GET("currencies")
    Call> listCurrencies();
    @GET("currencies/{symbol}")
    Call getCurrency(@Path("symbol")String currencySymbol);
    @GET("currencies/{symbol}/values/{compare_symbol}")
    Call> getComparativeHistory(@Path("symbol")String currency, @Path("compare_symbol")String currencyToPriceAgainst);
}

FinancesApiBuilder

public class FinancesApiBuilder {
    public static FinancesApi build(String baseUrl){
        return new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build()
                    .create(FinancesApi.class);
    }
}

FinancesFragment snippet

FinancesApi api = FinancesApiBuilder.build("http://api.example.com/"); //trailing '/' required for predictable behavior
api.getStock("INTC").enqueue(new Callback(){
    @Override
    public void onResponse(Call stockCall, Response stockResponse){
        Stock stock = stockCall.body();
        //do something with the stock
    }
    @Override
    public void onResponse(Call stockCall, Throwable t){
        //something bad happened
    }
}

Если ваш API требует, чтобы API-ключ или другой заголовок, такой как токен пользователя и т. д., отправлялся, Retrofit делает это проще (см. этот удивительный ответ для получения дополнительной информации: https://stackoverflow.com/a/42899766/1024412 ).

Один доступ к API-интерфейсу ReST

Предположим, вы создавая приложение «погода настроения», которое просматривает местоположение GPS-пользователей и проверяет текущую температуру в этой области и сообщает им настроение. Для этого типа приложения не требуется объявлять конечные точки API; он просто должен иметь доступ к одной конечной точке API.

Ion

Это отличная библиотека для этого типа доступа.

Пожалуйста, прочитайте отличный ответ msysmilu ( https://stackoverflow.com/a/28559884/1024412 )

Загружать изображения через HTTP

Волейбол

Volley также может использоваться для API-интерфейсов ReST, но из-за более сложной настройки я предпочитаю использовать Retrofit from Square, как указано выше ( http://square.github.io/retrofit/ )

Предположим, вы создаете приложение для социальных сетей и хотите загружать фотографии друзей друзей.

build.gradle

Добавьте эту строку в свой модуль level buid.gradle:

implementation 'com.android.volley:volley:1.0.0'

ImageFetch.java

Волейбол требует больше настроек, чем дооснащение. Вам нужно будет создать такой класс, чтобы настроить RequestQueue, ImageLoader и ImageCache, но это не так уж плохо:

public class ImageFetch {
    private static ImageLoader imageLoader = null;
    private static RequestQueue imageQueue = null;

    public static ImageLoader getImageLoader(Context ctx){
        if(imageLoader == null){
            if(imageQueue == null){
                imageQueue = Volley.newRequestQueue(ctx.getApplicationContext());
            }
            imageLoader = new ImageLoader(imageQueue, new ImageLoader.ImageCache() {
                Map cache = new HashMap();
                @Override
                public Bitmap getBitmap(String url) {
                    return cache.get(url);
                }
                @Override
                public void putBitmap(String url, Bitmap bitmap) {
                    cache.put(url, bitmap);
                }
            });
        }
        return imageLoader;
    }
}

user_view_dialog.xml

Добавить следующее в ваш XML-файл макета для добавления изображения:


UserViewDialog.java

Добавьте следующий код в метод onCreate (Фрагмент, Активность) или конструктор (Диалог):

NetworkImageView profilePicture = view.findViewById(R.id.profile_picture);
profilePicture.setImageUrl("http://example.com/users/images/profile.jpg", ImageFetch.getImageLoader(getContext());

Picasso

Еще одна отличная библиотека с площади. Пожалуйста, посетите сайт для некоторых замечательных примеров: http://square.github.io/picasso/

68
задан Danubian Sailor 20 March 2014 в 12:24
поделиться

7 ответов

Я использую простой скрипт при запуске jmeter с моей собственной версией java versin

<code>
setlocal
set JAVA_HOME="c:\java8"
set PATH=%JAVA_HOME%\bin;%PATH%;
java -version
</code>

, чтобы иметь «портативный» Java, вы можете использовать этот метод здесь:

https://www.whitebyte.info/programming/java/how-to-install-a-portable-jdk-in-windows-without-admin-rights

0
ответ дан Azzabi Haythem 27 August 2018 в 18:56
поделиться

Используя Java Web Start, вы можете установить несколько JRE, а затем вызвать то, что вам нужно. При выигрыше вы можете создать файл .bat:

1- онлайн-версия: & lt; your_JRE_version \ bin \ javaws.exe> ​​-localfile -J-Djnlp.application.href = & lt; url файла .jnlp .jnlp> -localfile -J "& lt; path_temp_jnlp_file _ .jnlp>"

2- запуск из кеша : & lt; your_JRE_version \ bin \ javaws.exe> ​​-localfile -J "& lt; path_of_your_local_jnlp_file .jnlp>"

0
ответ дан eliana 27 August 2018 в 18:56
поделиться

Я был потрясен неуклюжью идей CLASSPATH, JAVA_HOME и PATH в Windows, чтобы отслеживать файлы Java. Я приехал сюда из-за нескольких JRE и как с ним контактировать. Без отвращения информации от парня, гораздо более умного, чем я, я хотел бы указать на его статью по этому вопросу, которая для меня прекрасно ее устраняет.

Статья: Тед Ньювард: Несколько Java Homes: предоставление Java-приложений своим собственным JRE

. При экспоненциальном росте Java в качестве языка разработки на стороне сервера появился равномерный экспоненциальный рост в инструментах, средах, средах разработки Java , и расширения. К сожалению, не все эти инструменты прекрасно сочетаются друг с другом при одной и той же установке Java VM. Некоторым требуется среда, совместимая с Servlet 2.1, для некоторых требуется 2.2. Некоторые из них работают только под JDK 1.2 или выше, некоторые - под JDK 1.1 (и не выше). Некоторые из них требуют пакетов «com.sun.swing» от pre-Swing 1.0 дней, другие - для имен пакетов «javax.swing».

Хуже того, эта проблема может быть найдена даже внутри корпоративного предприятия, поскольку системы, разработанные с использованием Java всего лишь шесть месяцев назад, могут внезапно «не работать» из-за установки какого-либо расширения Java, требуемого новой (по-видимому, несвязанной) версией приложения. Это может усложнить развертывание приложений Java через корпорацию и привести клиентов к тому, чтобы точно спросить, почему через пять лет после начала печально известной проблемы «Установка-это-приложение-перерывы-моя-система» с использованием DLL-схем Microsoft мы все еще Это намного больше. (На самом деле, новая инициатива .NET фактически пытается решить проблему, описанную в пресловутой проблеме «DLL-Hell».)

В этом документе описывается, как настроить установку Java таким образом, чтобы данное приложение получало свои собственные, частный, JRE, позволяющий нескольким средам Java сосуществовать без привлечения клиентов (или системных администраторов) безумным ...

9
ответ дан gnat 27 August 2018 в 18:56
поделиться

Или используйте ссылки. Хотя довольно сложно обновить PATH в рабочей среде, легко воссоздать ссылку на новую версию JRE / JDK. Итак:

  • установить разные версии JDK, которые вы хотите использовать
  • , создать ссылку на эту папку либо через соединение , либо встроенный mklink Команда
  • устанавливает PATH в ссылку
  • Если используется другая версия java, удалите ссылку, создайте новую, скрипты PATH / JAVA_HOME / hardcoded остаются нетронутыми
2
ответ дан jan.supol 27 August 2018 в 18:56
поделиться

Вполне возможно установить бок о бок несколько версий JRE / JDK. Кроме того, вам не нужно ничего особенного делать, поскольку Sun создает для каждой папки разные папки (в разделе Program Files).

Нет контрольной панели, чтобы проверить, какая JRE работает для каждого заявление. В принципе, JRE, который будет работать, будет первым в вашей переменной среды PATH. Вы можете изменить эту переменную или переменную JAVA_HOME или создать определенные файлы cmd / bat для запуска приложений, которые вам нужны, каждая с другой JRE в пути.

11
ответ дан Moshe 27 August 2018 в 18:56
поделиться

Если вы используете Java Web Start (вы можете запускать приложения с любого URL-адреса, даже локальной файловой системы), он позаботится о поиске нужной версии для вашего приложения.

1
ответ дан Peter Mortensen 27 August 2018 в 18:56
поделиться

Должно быть возможным изменить настройку переменной среды JAVA_HOME по-разному для определенных приложений.

При запуске из командной строки или из пакетного скрипта вы можете использовать set JAVA_HOME=C:\...\j2dskXXX для изменения среды JAVA_HOME.

Возможно, вам также необходимо изменить PATH для использования правильного двоичного кода Java. Для этого вы можете использовать set PATH=%JAVA_HOME%\bin;%PATH%.

1
ответ дан Ruben 27 August 2018 в 18:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: