我最近开始开发Android应用程序并决定使用Retrofit作为REST服务的客户端,但我不确定我的方法是否良好:
一世.我已经实现了对我的api的异步调用,它在AsyncTask的doInBackground方法中调用.该关注:看了这篇文章让我困惑.AsyncTasks不适合这类任务吗?我应该直接从Activity调用API吗?我知道Retrofit的回调方法是在UI线程上执行的,但是通过HTTP调用呢?Retrofit是否为此创建线程?
II.我希望AuthenticationResponse保存在SharedPreferences对象中,该对象在回调的success方法中似乎不可用.有什么建议/良好做法吗?
先感谢您 :)
这是我的doInBackGroundMethod:
@Override
protected String doInBackground(String... params) {
Log.d(LOCATION_LOGIN_TASK_TAG, params[0]);
LocationApi.getInstance().auth(new AuthenticationRequest(params[0]), new Callback<AuthenticationResponse>() {
@Override
public void success(AuthenticationResponse authenticationResponse, Response response) {
Log.i("LOCATION_LOGIN_SUCCESS", "Successfully logged user into LocationAPI");
}
@Override
public void failure(RetrofitError error) {
Log.e("LOCATION_LOGIN_ERROR", "Error while authenticating user in the LocationAPI", error);
}
});
return null;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用AngularJS和Resteasy开发一个应用程序.正如所料,我面临众所周知的问题
XMLHttpRequest cannot load http://localhost:8080/..... No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 403.
正如在其他堆栈溢出帖[1]上看到的,我尝试使用来自Feature对象的Resteasy的CorsFilter,但我得到:
[33m02:06:57,883 WARN [org.jboss.resteasy.core.ExceptionHandler] (default task-1) failed to execute: javax.ws.rs.ForbiddenException: Origin not allowed: http://localhost:3000
at org.jboss.resteasy.plugins.interceptors.CorsFilter.checkOrigin(CorsFilter.java:194)
at org.jboss.resteasy.plugins.interceptors.CorsFilter.filter(CorsFilter.java:134)
Run Code Online (Sandbox Code Playgroud)
我的CorsFeature对象:
@Provider
public class CorsFeature implements Feature {
@Override
public boolean configure(FeatureContext context) {
CorsFilter corsFilter = new CorsFilter();
corsFilter.getAllowedOrigins().add("*");
context.register(corsFilter);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
在web.xml中我添加了:
<context-param>
<param-name>resteasy.providers</param-name> …
Run Code Online (Sandbox Code Playgroud) 我正在使用Hibernate和MySQL开发一个java Web应用程序.有时当我尝试持久化时,我得到这个回滚异常:
javax.persistence.RollbackException: Error while committing the transaction
at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:94)
at com.tulips.dao.CommentDao.saveOrUpdate(CommentDao.java:42)
at com.tulips.servlets.CommentsServlet.doPost(CommentsServlet.java:168)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:155)
at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:91)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:77)
... 23 …
Run Code Online (Sandbox Code Playgroud) 假设我有一个像这样的 POJO:
public class User {
private Long id;
private String username;
// usual getters and setters
....
// only for serialisation purposes
public String getUpperUsername() {
return this.id % 2 == 0 ? username : username.toUpperCase();
}
}
Run Code Online (Sandbox Code Playgroud)
我想制作一个条件序列化器,以便在满足某些条件时序列化与实际值不同的值。
我查看了@JsonGetter,但显然它已被弃用,@JsonProperty 似乎不起作用。
你有什么主意吗?
先感谢您 :)
我是棱角分明的新手,已经因为简单的演出不能按预期工作而感到沮丧.
我想显示/隐藏一个div取决于一个标志的状态(flightsProcessed)
fp: {{flightsProcessed}}
<div class="container-fluid" ng-show="flightsProcessed">
aaa
</div>
Run Code Online (Sandbox Code Playgroud)
我有一个控制器,在开始时有类似的东西:
$scope.flightsProcessed = false;
Run Code Online (Sandbox Code Playgroud)
之后,在$ http.success()触发的另一个函数中,我执行以下操作:
$scope.flightsProcessed = true;
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么当flightProcessed = true时不显示div虽然当我在它上面打印时,flightsProcessed = true?
我试过使用$ apply但是我得到< $digest already in progress
>
我究竟做错了什么?谢谢.
我知道这已被问过很多次了,解决方案非常明显,但在我的情况下它并没有真正起作用,我无法弄清楚如何解决它.
问题:Could not write JSON: Infinite recursion (StackOverflowError)
设置如下:
员工属于部门.(ManyToOne)部门有一名员工担任经理.(OneToOne)
我不想在部门中有一个@OneToMany列表,因此缺少了拥有方.员工有一个部门对象,但这是它所属的部门,而不是他管理的部门.
Employee.java
@Entity
@Table(name = "ts_employee")
//@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class,property="@emp_id")
public class Employee extends AbstractEntity {
@ManyToOne
@JoinColumn(name = "dept_id")
@JsonManagedReference
private Department department;
... getters and setters
}
Run Code Online (Sandbox Code Playgroud)
Department.java
@Entity
@Table(name = "ts_department")
//@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@dept_id")
public class Department extends AbstractEntity {
@OneToOne
@JoinColumn (name = "manager_id")
@JsonBackReference
private Employee manager;
.. other fields.. getters and setters
}
Run Code Online (Sandbox Code Playgroud)
AbstractEntity.java
@MappedSuperclass
public class AbstractEntity implements Serializable {
@Id
@GeneratedValue()
private Long id; …
Run Code Online (Sandbox Code Playgroud)