Android: Difference between revisions
Jump to navigation
Jump to search
Line 50: | Line 50: | ||
</source> | </source> | ||
==Rest | ==Rest Implement== | ||
<source lang="java"> | <source lang="java"> | ||
package org.chorke.academia.beans.endpoint; | package org.chorke.academia.beans.endpoint; |
Revision as of 19:21, 23 August 2021
@Rest(rootUrl = "https://api.chorke.org/rest/api", converters = { MappingJackson2HttpMessageConverter.class })
public interface EventsApi {
@Get("/events/{year}/{location}")
EventList getEventsByYearAndLocation(@Path int year, @Path String location);
@Get("/events/{year}/{location}")
EventList getEventsByLocationAndYear(@Path String location, @Path int year);
}
Dependencies
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.androidannotations</groupId>
<artifactId>rest-spring</artifactId>
<version>4.8.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
Delete with Body
package org.chorke.academia.utility;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import java.io.IOException;
import java.net.HttpURLConnection;
public class RestClientFactory extends SimpleClientHttpRequestFactory {
@Override
protected void prepareConnection(HttpURLConnection connection, String httpMethod) throws IOException {
super.prepareConnection(connection, httpMethod);
if("DELETE".equals(httpMethod)) {
connection.setDoOutput(true);
}
}
}
Rest Implement
package org.chorke.academia.beans.endpoint;
import org.chorke.academia.utility.RestClientFactory;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.DefaultUriBuilderFactory;
import java.util.Map;
public interface ProductEndpoint {
String ROOT_ENDPOINT = "https://dev.chorke.org/academia/api/rest/v1.0";
//@Get("/product")
Map<String, Object> getAll();
//@Get("/product/{id}")
Map<String, Object> getOne(int id);
//@Post("/product")
Map<String, Object> create(Map<String, Object> product);
//@Put("/product/{id}")
Map<String, Object> update(int id, Map<String, Object> product);
//@Delete("/delete/{id}")
Map<String, Object> delete(int id, Map<String, Object> product);
enum Actions {
GET_PRODUCTS("/product"),
GET_PRODUCT("/product/{id}"),
POST_PRODUCT("/product"),
PUT_PRODUCT("/product/{id}"),
DELETE_PRODUCT("/product/{id}");
private String uri;
Actions(String uri){
this.uri = uri;
}
public String getUri() {
return uri;
}
}
default RestTemplate getEndpoint() {
RestTemplate endpoint = new RestTemplate(new RestClientFactory());
endpoint.setUriTemplateHandler(new DefaultUriBuilderFactory(this.getRootUri()));
return endpoint;
}
RestTemplateBuilder getBuilder();
String getRootUri();
}
package org.chorke.academia.beans.endpoint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.util.UriComponentsBuilder;
import java.util.HashMap;
import java.util.Map;
@Component
public class ProductEndpointImpl implements ProductEndpoint {
@Value("${chorke.academia.endpoint.root.uri:}")
String rootUri;
@Autowired
RestTemplateBuilder builder;
//@Get("/product")
@SuppressWarnings("unchecked")
public Map<String, Object> getAll(){
String uri = UriComponentsBuilder.fromUriString(Actions.GET_PRODUCTS.getUri())
.queryParam("sort","code")
.queryParam("dir","ASC")
.queryParam("limit",10)
.queryParam("start",0)
.queryParam("page",1)
.build().toUriString();
return this.getEndpoint()
.getForObject(uri, Map.class);
}
//@Get("/product/{id}")
@SuppressWarnings("unchecked")
public Map<String, Object> getOne(int id){
Map<String, Object> params = new HashMap<>();
params.put("id", id);
return this.getEndpoint()
.getForObject(
Actions.GET_PRODUCT.getUri(),
Map.class, params
);
}
//@Post("/product")
@SuppressWarnings("unchecked")
public Map<String, Object> create(Map<String, Object> product){
return this.getEndpoint()
.postForObject(Actions.POST_PRODUCT.getUri(), product, Map.class);
}
//@Put("/product/{id}")
@SuppressWarnings("unchecked")
public Map<String, Object> update(int id, Map<String, Object> product){
HttpEntity<Map<String, Object>> payload = new HttpEntity<>(product);
Map<String, Object> params = new HashMap<>();
params.put("id", id);
return this.getEndpoint()
.exchange(
Actions.PUT_PRODUCT.getUri(), HttpMethod.PUT,
payload, Map.class, params
).getBody();
}
//@Delete("/product/{id}")
@SuppressWarnings("unchecked")
public Map<String, Object> delete(int id, Map<String, Object> product){
HttpEntity<Map<String, Object>> payload = new HttpEntity<>(product);
Map<String, Object> params = new HashMap<>();
params.put("id" , id);
return this.getEndpoint()
.exchange(
Actions.DELETE_PRODUCT.getUri(), HttpMethod.DELETE,
payload, Map.class, params
).getBody();
}
@Override
public RestTemplateBuilder getBuilder() {
return builder;
}
@Override
public String getRootUri() {
rootUri = !StringUtils.isEmpty(rootUri) ? rootUri : ROOT_ENDPOINT;
return rootUri;
}
}
Redmi Note 5
Settings » About Phone » MIUI Version (TAP 7 more Times) Settings » Additional Settings » Scroll Down » Developer Options
Anko Layout
compile 'org.jetbrains.anko:anko-design:0.8.3' compile 'org.jetbrains.anko:anko-appcompat-v7:0.8.3'
Knowledge
%APPDATA%\..\Local\Android\sdk
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V
#Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All