- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 php 中调用数据库中的数据,并使用 Web 服务将数据传递给代号 one。如果我将我的 URL 指向一个 JSON 文件,我能够获取我的记录,但是当我将它更改为 php 并使用 JSON 对页面进行编码时,我得到的是空值。
在 Codename one 中使用 Web 服务时如何解析空结果?
这是我在代号一中调用的 php 代码
<?php
/* require the user as the parameter */
//http://localhost:8080/sample1/webservice1.php?user=1
if(isset($_GET['user']) && intval($_GET['user'])) {
/*soak in the passed variable or set our own*/
//$number_of_posts = isset($_GET['num']) ? intval($_GET['num']) : 10; //10 is the default
$format = strtolower($_GET['format']) == 'json' ? 'json' : 'xml'; //xml is the default
//$user_id = intval($_GET['user']); //no default
/* connect to the db */
$link = mysql_connect('localhost','root','') or die('Cannot connect to the DB');
mysql_select_db('test',$link) or die('Cannot select the DB');
/* grab the posts from the db */
//$query = "SELECT post_title, guid FROM wp_posts WHERE post_author = $user_id AND post_status = 'publish' ORDER BY ID DESC LIMIT $number_of_posts";
$query = "SELECT * FROM bugs";
$result = mysql_query($query,$link) or die('Errant query: '.$query);
/* create one master array of the records */
$posts = array();
if(mysql_num_rows($result)) {
while($post = mysql_fetch_assoc($result)) {
$posts[] = array('respons'=>$post);
}
}
/* output in necessary format */
if($format == 'json') {
// header('Content-type: application/json');
echo json_encode(array('respons'=>$posts));
}
/* disconnect from the db */
@mysql_close($link);
}
这是我的代号一代码
private static final String URL = "http://localhost/webpin/webservice1.php?user=1&format=json";
showpix.addActionListener((e)->{
ConnectionRequest req = new ConnectionRequest() {
@Override
protected void handleException(Exception ex) {
//handle error
}
};
req.setUrl(URL);
req.setPost(true);
req.setHttpMethod("GET"); //Change to GET if necessary
req.setDuplicateSupported(true);
req.addArgument("user", mypin.getText());
//req.addArgument("argumentToSendThroughPostOrGet2", "value2");
NetworkManager.getInstance().addToQueueAndWait(req);
if (req.getResponseCode() == 200) {
Map<String, Object> out = new HashMap<>();
Display.getInstance().invokeAndBlock(() -> {
JSONParser p = new JSONParser();
try (InputStreamReader r = new InputStreamReader(new ByteArrayInputStream(req.getResponseData()))) {
out.putAll(p.parseJSON(r));
} catch (IOException ex) {
//handle error
}
});
if (!out.isEmpty()) {
List<Map<String, Object>> responses = (List<Map<String, Object>>) out.get("respons");
for (Object response : responses) {
Map res = (Map) response;
//Object hk = res.get("id");
System.out.println(res.get("id"));
//if(hk.equals("I was returned")){
Dialog.show("ok",res.get("id") + "", "ok", "ok");
//}
//System.out.println(res.get("key"));
}
} else {
//handle error
}
} else {
//handle error
}
//req.setPost(false);
NetworkManager.getInstance().addToQueueAndWait(req);
});
当我使用提供的解决方案调试我的代码时,我收到以下错误代码:
java.lang.IllegalStateException: Request method (post/get) can't be modified once arguments have been assigned to the request
Rendering frame took too long 391 milliseconds
at com.codename1.io.ConnectionRequest.setPost(ConnectionRequest.java:1046)
at com.mycompany.myapp.MyApplication.lambda$start$1(MyApplication.java:293)
at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:349)
at com.codename1.ui.Button.fireActionEvent(Button.java:411)
at com.codename1.ui.Button.released(Button.java:442)
at com.codename1.ui.Button.pointerReleased(Button.java:530)
at com.codename1.ui.Form.pointerReleased(Form.java:2623)
at com.codename1.ui.Form.pointerReleased(Form.java:2559)
at com.codename1.ui.Component.pointerReleased(Component.java:3223)
at com.codename1.ui.Display.handleEvent(Display.java:2022)
at com.codename1.ui.Display.edtLoopImpl(Display.java:1067)
at com.codename1.ui.Display.mainEDTLoop(Display.java:996)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
这是代码:
showpix.addActionListener((e)->{
ConnectionRequest req = new ConnectionRequest() {
@Override
protected void handleException(Exception ex) {
//handle error
}
};
req.setUrl(DESTINATION_URL);
req.setPost(true);
req.setHttpMethod("GET"); //Change to GET if necessary
req.setDuplicateSupported(true);
//req.addArgument("user", mypin.getText());
req.addArgument("user", mypin.getText());
req.addArgument("format", "json");
req.setPost(false);
NetworkManager.getInstance().addToQueueAndWait(req);
if (req.getResponseCode() == 200) {
Map<String, Object> out = new HashMap<>();
Display.getInstance().invokeAndBlock(() -> {
JSONParser p = new JSONParser();
try (InputStreamReader r = new InputStreamReader(new ByteArrayInputStream(req.getResponseData()))) {
out.putAll(p.parseJSON(r));
} catch (IOException ex) {
//handle error
}
});
if (!out.isEmpty()) {
List<Map<String, Object>> responses = (List<Map<String, Object>>) out.get("response");
for (Object response : responses) {
Map res = (Map) response;
// Object hk = res.get("id");
System.out.println(res.get("id"));
// if(hk.equals("I was returned")){
// Dialog.show("ok",res.get("pin")+ "", "ok", "ok");
// }
System.out.println(res.get("id"));
}
} else {
//handle error
}
} else {
//handle error
}
});
另一个错误代码:
警告:Apple 将不再接受来自您尝试连接到的应用程序的 http URL 连接 http://localhost/webpin/webservice1.php?user=1&format=json要了解更多信息,请查看 https://www.codenameone.com/blog/ios-http-urls.html[invokeAndBlock1] 0:0:0,0 - 代号一修订版:375ed2c938445450f0983f0d18235f61e793a7ee2004
[invokeAndBlock1] 0:0:0,0 - Expected true for key value while parsing JSON token at row: 1 column: 12 buffer: E
[invokeAndBlock1] 0:0:0,0 - Expected true for key value while parsing JSON token at row: 2 column: 3 buffer: E
[invokeAndBlock1] 0:0:0,0 - Expected true for key value while parsing JSON token at row: 4 column: 12 buffer: Eede
[invokeAndBlock1] 0:0:0,0 - Expected true for key value while parsing JSON token at row: 4 column: 13 buffer: Eede
[invokeAndBlock1] 0:0:0,0 - Exception: java.lang.ArrayIndexOutOfBoundsException - -1
java.lang.ArrayIndexOutOfBoundsException: -1
[invokeAndBlock1] 0:0:0,16 - Exception during JSON parsing at row: 4 column: 33 buffer: EedeeContent-Type
at java.util.ArrayList.elementData(ArrayList.java:418)
at java.util.ArrayList.get(ArrayList.java:431)
at com.codename1.io.JSONParser.isStackHash(JSONParser.java:449)
at com.codename1.io.JSONParser.stringToken(JSONParser.java:527)
at com.codename1.io.JSONParser.parse(JSONParser.java:164)
at com.codename1.io.JSONParser.parseJSON(JSONParser.java:427)
at com.mycompany.myapp.MyApplication.lambda$null$0(MyApplication.java:302)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:103)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:140)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
最佳答案
我注意到的第一件事是您调用了 NetworkManager.getInstance().addToQueueAndWait(req);
两次。
第二件事是,如果您在 php 中使用 $_GET 方法,则应将 req.setPost(true);
更改为 req.setPost(false);
。
第三,从您的 URL 中删除 "?" 和后面的所有内容,无论您想要传递什么,都应该通过下面添加:
网址:
private static final String URL = "http://localhost/webpin/webservice1.php";
参数:
req.addArgument("format", "json");
req.addArgument("user", mypin.getText());
在 php 端,在浏览器中运行您的代码以确保您的代码中没有错误 请务必取消注释 header
。请参阅以下对您的代码的细微更改:
$posts = array();
$row = array();
if(mysql_num_rows($result)) {
while($post = mysql_fetch_assoc($result)) {
$posts["response"][] = $post;
}
$row = array("respons" => $posts["response"], "code" => 200, "message" => "success");
} else {
$row = array("code" => 101, "message" => "No data was returned");
}
/* output in necessary format */
if($format == 'json') {
header('Content-type: application/json');
echo json_encode($row, JSON_PRETTY_PRINT);
}
关于php - 在代号一中使用 webservices 时如何解析 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40146488/
我正在尝试使用 Eclipse 和 codename one 跨平台环境建立与数据库的在线连接。 很明显,将本地数据库放在默认文件夹中可以让您访问数据库,连接代码如下: db = Display.ge
我正在尝试通过代码在我的应用程序上打开侧面菜单。 我的表单使用工具栏用更复杂的组件填充侧面菜单。 我用它来关闭菜单: SideMenuBar.closeCurrentMenu(); 但我找不到等效的打
我正在使用 Codename One 开发移动应用。 我有一个外部容器,我通过调用方法 addPointerReleasedListener 添加了一个 ActionListener。 还有更多未添加
现在我正在使用 Codename one Calendar API,它工作正常,但我在日历 ui 方面遇到了一些设计问题。我的要求是当我点击特定的一天并将其添加为事件日时,那么该日的颜色就会改变。 以
我正在 Samsung Galaxy Tab A 10.1 (2019) 上测试我的应用(调试版本)。设备分辨率为 1200 x 1920。但是,当我使用 getDisplayWidth() 和 ge
我正在用 Textfield 创建一个 GenericListCellRenderer,我需要编辑 textfield 并替换其中的值,但我没有单击 Textfield 时获得任何焦点。我试过的代码如
Codename One动画发生了什么?我使用了很多,自12月起,我的应用程序不再起作用。当我在六月离开东西时,一切都很好(至今已经一年多了)。 我的应用程序是草稿(跳棋)游戏,自2013年以来在应用
我正在尝试为 Android 发布我的 Codename One-built 应用程序,但在尝试上传新版本(发布 apk 或 aab)时,我卡在了 Google Play 控制台上。 自 2021 年
我正在尝试在 Codename One 中使用计时器,但它只有“UITimer”,我似乎无法弄清楚也找不到任何示例。 所以我尝试了 Swing 计时器,但它给了我错误: codename1.ui.ev
我的应用程序构建正常,但是当我添加库 parse4cn1 时,构建失败 ios 失败示例: CompileC build/Main.build/Release-iphoneos/Main.build/
在代号一中,我试图实现一张用户卡,其中包含一些描述和两个操作按钮(调用和短信),位于卡的底部,彼此水平放置。有没有办法“分割”最后一个文本行?帮助会很棒! 谢谢! 最佳答案 您可以将这 2 个按钮放置
我目前正在用代号一写一个简单的游戏,我希望用户选择国家。 我希望在可滚动列表中将国家表示为图像。 我有一个在 X 轴上带有 BoxLayout 的容器,以及内部带有图标的按钮。 问题是不适合容器的列表
我正在尝试使用 setBrowserNavigationCallback BrowserComponent 的方法从 html 页面调用 java 方法。 这就是我在java中的内容:
我尝试将我的 Codename One 应用程序发送到构建服务器来构建 Android 应用程序,但它一直失败。一切在模拟器上运行良好,没有错误。唯一的问题是当我尝试将项目发送到构建服务器时。这是错误
我正在尝试以代号一创建一个音乐播放应用程序,在向媒体播放器添加 slider 时遇到问题。应用程序运行时会显示 slider ,但播放文件时不会显示进度。这是我用来添加自定义播放和暂停按钮以及 sli
我习惯用 Java 开发桌面应用程序。现在我正在尝试使用 Codename One 开发我的第一个移动应用程序。 在尝试复制我在 SQL 数据库方面的经验时,我遇到了一种非常奇怪的存储行为,我无法解释
我正在尝试使用我的 cn1 android 应用程序获取推送通知。我让它在 ios 上完美运行,但出于某种原因,它甚至没有在 android 上注册。这是我做的 我在我的 Play 商店控制台中启动了
我在 iPhone 7 上运行了一个代号为 one 的程序。那部手机最近没电了,我得到了 iPhone11 pro。我从旧手机中删除了 UDID,并将新手机的 UDID 添加到我的苹果开发者帐户中。我
我有一个图标按钮,带有一个小方形图标。 按钮嵌入在 BoxLayout 中。 有没有办法减小按钮的大小,以便自动达到图标的准确大小? 我的意思是,我知道我可以更改按钮的大小编辑边距和填充,但我想问我是
我正在创建一个媒体播放器应用程序,该应用程序应该从远程 URL 流式传输 mp3 文件。问题是,在代号为一个模拟器上一切正常,但在实际的 Android 设备上却不行。我希望该应用程序能够像模拟器上一
我是一名优秀的程序员,十分优秀!