Java 改装Android get date from REST API无法正常工作
我有一个关于spring的RESTAPI。我可以从url:localhost:8080/all获取数据 我创建了一个类:Java 改装Android get date from REST API无法正常工作,java,android,post,Java,Android,Post,我有一个关于spring的RESTAPI。我可以从url:localhost:8080/all获取数据 我创建了一个类: public class DataAPI { private static final String CLASS_TAG = "DataAPI"; RestAdapter retrofit; MyWebService myWebService; private List<Teacher> list; public Dat
public class DataAPI {
private static final String CLASS_TAG = "DataAPI";
RestAdapter retrofit;
MyWebService myWebService;
private List<Teacher> list;
public DataAPI() {
String url = "http://10.101.12.31:8080/";
retrofit = new RestAdapter.Builder()
.setEndpoint(url)
.build();
myWebService = retrofit.create(MyWebService.class);
}
@RequiresApi(api = Build.VERSION_CODES.N)
public List<Department> getAllDepartments() {
try {
myWebService.getAllTeacher(new Callback<List<Teacher>>() {
@Override
public void success(List<Teacher> data, Response response) {
Log.d(CLASS_TAG, data.toString());
// data.stream().forEach(System.out::println);
list= data;
}
@Override
public void failure(RetrofitError error) {
}
});
} catch (Exception e) {
Log.d(CLASS_TAG, e.toString());
}
return this.departmentList;
}
公共类DataAPI{
私有静态最终字符串CLASS_TAG=“DataAPI”;
再适应改造;
MyWebService MyWebService;
私人名单;
公共数据API(){
字符串url=”http://10.101.12.31:8080/";
改装=新的RestAdapter.Builder()
.setEndpoint(url)
.build();
myWebService=reformation.create(myWebService.class);
}
@RequiresApi(api=Build.VERSION\u code.N)
公共列表getAllDepartments(){
试一试{
myWebService.getAllTeacher(新回调(){
@凌驾
public void成功(列表数据、响应){
Log.d(CLASS_标记,data.toString());
//data.stream().forEach(System.out::println);
列表=数据;
}
@凌驾
公共无效失败(错误){
}
});
}捕获(例外e){
Log.d(CLASS_标记,例如toString());
}
返回此.departmentList;
}
MyWebService:
public interface MyWebService {
@GET("/all")
void getAllDepartments(Callback<List<Teacher>> pResponse);
公共接口MyWebService{
@获取(“/全部”)
作废所有部门(回拨预应答);
主要活动:
public class MainActivity extends AppCompatActivity {
private static final String CLASS_TAG = "MainActivity";
TextView textView;
DataAPI dataAPI;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dataAPI = new DataAPI();
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
findViewById(R.id.button_get).setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onClick(View v) {
textView.setText("");
List<Teacher> list = dataAPI.getAllDepartments();
System.out.println(list == null);
if (list != null){
list.stream().forEach(x -> textView.setText(textView.getText() + "\n" + x.toString()));
}
}
});
public类MainActivity扩展了AppCompatActivity{
私有静态最终字符串CLASS_TAG=“MainActivity”;
文本视图文本视图;
DataAPI DataAPI;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
dataAPI=新的dataAPI();
setContentView(R.layout.activity_main);
textView=findViewById(R.id.textView);
findviewbyd(R.id.button\u get).setOnClickListener(新视图.OnClickListener(){
@RequiresApi(api=Build.VERSION\u code.N)
@凌驾
公共void onClick(视图v){
textView.setText(“”);
List List=dataAPI.getAllDepartments();
System.out.println(list==null);
如果(列表!=null){
list.stream().forEach(x->textView.setText(textView.getText()+“\n”+x.toString());
}
}
});
我的应用程序上有一个按钮。当我第一次点击它时,没有任何变化,但当我第二次点击时,数据正在加载。
当我将所有代码从DataAPI粘贴到方法onClick时,数据将在第一时间加载。使用接口将数据获取到调用的活动,如下所示, 第一个写接口
public class APICallBack {
public interface GetResponseCallback{
void onSuccess(yourresponsetype response);
void onFailed();
}
}
在MainActivity中实现此接口。
当你打电话的时候
dataAPI.getAllDepartments()
将接口传递给DataAPI类
public List<Department> getAllDepartments(final APICallback.GetResponseCallback callback){
@Override
public void success(List<Teacher> data, Response response) {
Log.d(CLASS_TAG, data.toString());
// data.stream().forEach(System.out::println);
list= data;
callback.onSuccess(response);
}
}
公共列表getAllDepartments(最终APICallback.GetResponseCallback回调){
@凌驾
public void成功(列表数据、响应){
Log.d(CLASS_标记,data.toString());
//data.stream().forEach(System.out::println);
列表=数据;
callback.onSuccess(响应);
}
}
使用接口将数据获取到被调用的活动,如下所示,
第一个写接口
public class APICallBack {
public interface GetResponseCallback{
void onSuccess(yourresponsetype response);
void onFailed();
}
}
在MainActivity中实现此接口。
当你打电话的时候
dataAPI.getAllDepartments()
将接口传递给DataAPI类
public List<Department> getAllDepartments(final APICallback.GetResponseCallback callback){
@Override
public void success(List<Teacher> data, Response response) {
Log.d(CLASS_TAG, data.toString());
// data.stream().forEach(System.out::println);
list= data;
callback.onSuccess(response);
}
}
公共列表getAllDepartments(最终APICallback.GetResponseCallback回调){
@凌驾
public void成功(列表数据、响应){
Log.d(CLASS_标记,data.toString());
//data.stream().forEach(System.out::println);
列表=数据;
callback.onSuccess(响应);
}
}
如果可以将RestAdapter.Builder
与GSON
一起使用,则可以为解析器定义日期格式:
Gson gson = new GsonBuilder()
.setDateFormat(API_DATE_FORMAT)
.create();
Retrofit retrofit = new retrofit2.Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(API_BASE_URL)
.build();
如果可以将该
RestAdapter.Builder
与GSON
一起使用,则可以为解析器定义日期格式:
Gson gson = new GsonBuilder()
.setDateFormat(API_DATE_FORMAT)
.create();
Retrofit retrofit = new retrofit2.Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(API_BASE_URL)
.build();
请您添加一些关于“我的应用程序”的详细信息,不仅仅是关于您的“REST API”?我的应用程序获取对象列表并在应用程序上设置它们(字符串)。这是Android应用程序。由于您的调用是异步的,您正在返回一个空列表。请在success方法中返回列表,可能使用livedata之类的方法。请您添加一些关于“我的应用程序”的详细信息,而不仅仅是关于您的“REST API”?我的应用程序获取对象列表并在应用程序上设置它们(字符串)。这是Android应用程序。您返回的是一个空列表,因为您的调用是异步的。在success方法中返回列表,可能使用livedata之类的方法。此解决方案不起作用,因为我有:公共接口MyWebService{@GET(“/all”)void getAllDepartments(回调前应答);我已经使用过您的界面,如getAllDepartments()在我的代码中。方法getAllDepartments没有要重写的方法success。它位于我在回答中实现的回调接口中。再次:我必须创建包含接口的类APICallBack,在MainActivity类中实现此接口:公共类MainActivity扩展AppCompativity实现APICallBack和@Override我不知道你说的“将接口传递给DataAPI类。公共列表getAllDepartments(最终的APICallback.GetResponseCallback回调){”是什么意思,因为我有:公共接口MyWebService{@GET(“/all”)void getAllDepartments(回调前应答);我已经使用过您的界面,如getAllDepartments()在我的代码中。方法getAllDepartments没有要重写的方法success。它位于我在回答中实现的回调接口中。再次:我必须创建包含接口的类APICallBack,在MainActivity类中实现此接口:公共类MainActivity扩展AppCompativity实现APICallBack和@Override我不知道该怎么办