На этот вопрос уже много замечательных ответов, но с тех пор, как эти ответы были опубликованы, появилось много замечательных библиотек.
Я рассмотрю несколько вариантов использования сетевых операций и a решение или два для каждого.
Обычно Json может быть XML или что-то еще
Предположим, вы пишете приложение что позволяет пользователям отслеживать цены акций, процентные ставки и курсы обмена валют. Вы найдете 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)
Это отличный выбор для 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 ).
Предположим, вы создавая приложение «погода настроения», которое просматривает местоположение GPS-пользователей и проверяет текущую температуру в этой области и сообщает им настроение. Для этого типа приложения не требуется объявлять конечные точки API; он просто должен иметь доступ к одной конечной точке API.
Это отличная библиотека для этого типа доступа.
Пожалуйста, прочитайте отличный ответ msysmilu ( https://stackoverflow.com/a/28559884/1024412 )
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());
Еще одна отличная библиотека с площади. Пожалуйста, посетите сайт для некоторых замечательных примеров: http://square.github.io/picasso/
Я использую простой скрипт при запуске jmeter с моей собственной версией java versin
<code>
setlocal
set JAVA_HOME="c:\java8"
set PATH=%JAVA_HOME%\bin;%PATH%;
java -version
</code>
, чтобы иметь «портативный» Java, вы можете использовать этот метод здесь:
Используя 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>"
Я был потрясен неуклюжью идей 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 сосуществовать без привлечения клиентов (или системных администраторов) безумным ...
blockquote>
Или используйте ссылки. Хотя довольно сложно обновить PATH в рабочей среде, легко воссоздать ссылку на новую версию JRE / JDK. Итак:
Вполне возможно установить бок о бок несколько версий JRE / JDK. Кроме того, вам не нужно ничего особенного делать, поскольку Sun создает для каждой папки разные папки (в разделе Program Files).
Нет контрольной панели, чтобы проверить, какая JRE работает для каждого заявление. В принципе, JRE, который будет работать, будет первым в вашей переменной среды PATH. Вы можете изменить эту переменную или переменную JAVA_HOME или создать определенные файлы cmd / bat для запуска приложений, которые вам нужны, каждая с другой JRE в пути.
Если вы используете Java Web Start (вы можете запускать приложения с любого URL-адреса, даже локальной файловой системы), он позаботится о поиске нужной версии для вашего приложения.
Должно быть возможным изменить настройку переменной среды JAVA_HOME по-разному для определенных приложений.
При запуске из командной строки или из пакетного скрипта вы можете использовать set JAVA_HOME=C:\...\j2dskXXX
для изменения среды JAVA_HOME.
Возможно, вам также необходимо изменить PATH
для использования правильного двоичного кода Java. Для этого вы можете использовать set PATH=%JAVA_HOME%\bin;%PATH%
.