将数据从 Azure 移动服务检索到 java 中的 android 应用程序中
本文关键字:中的 java android 应用程序 检索 数据 Azure 移动 服务 | 更新日期: 2023-09-27 18:35:01
我有一个Azure移动服务,它从多个源检索数据并将其提供给我的移动应用程序使用。 到目前为止,我已经在开发Windows移动应用程序中使用它,并且它工作得很好。现在我想将相同的应用程序扩展到 android ,我想利用来自同一 azure 移动服务的数据。
用于检索数据的 Windows 应用程序的 C# 代码是
MobileServiceClient mobileservice = new MobileServiceClient("url", "key");
var aod_return = await mobileservice.InvokeApiAsync("CCOOutageHistoryData", HttpMethod.Get, null);
List<Data> aod_result = JsonConvert.DeserializeObject<List<Data>>(aod_return.ToString());
VList3.ItemsSource = aod_result;
我尝试在 JAVA 中将其用于安卓应用程序
try {
mClient = new MobileServiceClient("url", "key", this);
mClient.invokeApi("CCOOutageHistoryData",null, "GET", null, new ApiJsonOperationCallback() {
@Override
public void onCompleted(JsonElement jsonElement, Exception e, ServiceFilterResponse serviceFilterResponse) {
GsonBuilder gsonb = new GsonBuilder();
Gson gson = gsonb.create();
JsonArray array = jsonElement.getAsJsonArray();
List<MyObject> myObjects = new ArrayList<MyObject>();
for(int i = 0; i < array.size(); i++) {
myObjects.add(gson.fromJson(array.get(i).getAsJsonObject().toString(), MyObject.class));
}
}
});
} catch (MalformedURLException e) {
// Do nothing
}
但是,当我给出断点时,初始化mclient后它不会进入下一行代码,而且我用于mclient.Incokeapi的语法据说已被弃用。 你能指出错误并帮助我在 Java 的新语法中实现上述 C# 代码吗?
我在构建代码时收到以下异常。
invoke is not implemented
java.lang.UnsupportedOperationException: invoke is not implemented
at com.jetbrains.cidr.lang.refactoring.introduce.OCBaseIntroduceHandler.invoke(OCBaseIntroduceHandler.java:263)
at com.intellij.refactoring.actions.BaseRefactoringAction.actionPerformed(BaseRefactoringAction.java:125)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher$3.performAction(IdeKeyEventDispatcher.java:593)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:644)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.inInitState(IdeKeyEventDispatcher.java:483)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.dispatchKeyEvent(IdeKeyEventDispatcher.java:213)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:538)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:382)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
我试过使用
mClient.invokeApi("CCOOutageHistoryData",null, "GET", null, new ApiJsonOperationCallback() {
@Override
public void onCompleted(JsonElement jsonElement, Exception e, ServiceFilterResponse serviceFilterResponse) {
GsonBuilder gsonb = new GsonBuilder();
Gson gson = gsonb.create(); JsonArray array = jsonElement.getAsJsonArray();
List<MyObject> myObjects = new ArrayList<MyObject>();
for(int i = 0; i < array.size(); i++)
{
myObjects.add(gson.fromJson(array.get(i).getAsJsonObject().toString(), MyObject.class));
}
}
});
但不起作用. 有人可以帮我解决这个问题吗
根据我的理解,您希望使用 Java for Android 从移动服务的 JavaScript 后端中的自定义 API 端点检索数据,就像您在 C# 中的代码一样。
假设您熟悉 C#,nto Java。我认为您可以尝试查看类 MobileServiceClient
的 javadoc,以了解如何使用具有不同参数invokeApi
函数。我找不到这个javadoc,但我认为你可以从 https://github.com/Azure/azure-mobile-services/blob/master/sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/MobileServiceClient.java 的类MobileServiceClient
源代码的注释中获得类似的帮助。
同时,下面有一些官方教程和博客可以帮助学习原理。
- 如何:在 JavaScript 后端移动服务中定义自定义 API 终结点
- 文档的第
How to: Call a custom API
部分How to use the Android client library for Mobile Services
- 来自 MSDN 的博客
Custom API in Azure Mobile Services – Client SDKs
希望对您有所帮助。此致敬意。
更新:
后端的响应内容如下:
{"name": "peter", "age": 28}
Java 代码如下:
public class Person {
private String name;
private int age;
....Getting & Setting Methods
}
// The code `Person.class` as the Class<E> clazz argument for the function invokeApi, not null
mClient.invokeApi("<controllerName>", "GET", Person.class);