gpt4 book ai didi

php - 将 JSON 数据从 Android 发送到 PHP 并写入文本文件

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:18 25 4
gpt4 key购买 nike

我正在尝试获取在 Android 设备上动态创建的特定 JSON 文件,并使用 HTTP post 请求将该数据发送到 PHP 脚本以存储到文本文件中供以后使用。最终我还需要将数据保存在 MySQL 数据库中,但我是一步一个脚印地工作。 JSON 文件的格式示例如下:

{"timestamp": 1351181576.64078, "name": "engine_speed", "value": 714.0}
{"timestamp": 1351181576.64578, "name": "vehicle_speed", "value": 0.0}
{"timestamp": 1351181576.6507802, "name": "brake_pedal_status", "value": true}

此文件是在 Android 上逐行动态创建的,因此我无法一次发送整个文件,但我想将创建的每一行发送到 PHP 脚本。我编写了一个基本的 Android 应用程序,当按下按钮时,它会获取一个 JSONObject 并使用 HTTP Post 将其发送到 PHP 脚本。现在我不担心将实际的 JSON 文件解析为要发送的对象,而只是使用两个测试 JSONObject。 PHP 脚本获取第一个对象并将其存储到文本文件中没问题,但另一个对象一直读取为 null,我不明白为什么。我对 PHP 和 Android 编程比较陌生,不确定我是否以正确的方式发送和接收数据。以下是我的相关 Android 应用程序代码 fragment :

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final Button button = (Button) findViewById(R.id.sendData);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Perform action on click
Toast.makeText(MainActivity.this, "button was pressed",
Toast.LENGTH_SHORT).show();
try {
JSONObject json = new JSONObject();
json.put("timestamp", 1351181576.64078);
json.put("name", "engine_speed");
json.put("value", 714.0);
postData(json);

JSONObject json2 = new JSONObject();
json.put("timestamp", 1351181576.7207818);
json.put("name", "steering_wheel_angle");
json.put("value", 11.1633);
postData(json2);
} catch (JSONException e) {
e.printStackTrace();
}

}
});
}

public void postData(JSONObject json) throws JSONException {
HttpClient httpclient = new DefaultHttpClient();

try {
HttpPost httppost = new HttpPost(URL);

List<NameValuePair> nvp = new ArrayList<NameValuePair>(2);
nvp.add(new BasicNameValuePair("json", json.toString()));
//httppost.setHeader("Content-type", "application/json");
httppost.setEntity(new UrlEncodedFormEntity(nvp));
HttpResponse response = httpclient.execute(httppost);

if(response != null) {
InputStream is = response.getEntity().getContent();
//input stream is response that can be shown back on android
}

}catch (Exception e) {
e.printStackTrace();
}
}

下面是从 HTTP Post 中获取数据并将其写入文本文件的 PHP 代码:

<?php
$filename = __DIR__.DIRECTORY_SEPARATOR."jsontest.txt";
$json = $_POST['json'];
$data = json_decode($json, TRUE);

if(is_null($json) == false){
file_put_contents($filename, "$json \n", FILE_APPEND);
foreach ($data as $name => $value) {
file_put_contents($filename, "$name -> $value \t", FILE_APPEND);
}
file_put_contents($filename, "\n", FILE_APPEND);
}

$myFile = "jsontest.txt";
$fh = fopen($myFile, 'r');
$theData = fread($fh, filesize($myFile));
fclose($fh);
?>

<meta http-equiv="refresh" content="3" >
<html>
<!-- Displaying the data from text file, not really needed -->
<p><?php echo $theData; ?></p>
</html>

现在输出的文本文件看起来像这样,第一个对象保存得很好,第二个对象显示为空:

{"value":714,"timestamp":1.35118157664078E9,"name":"engine_speed"} 
value -> 714 timestamp -> 1351181576.64 name -> engine_speed
{}

最佳答案

您的问题出在您的 Android 应用程序中:

            JSONObject json = new JSONObject(); 
json.put("timestamp", 1351181576.64078);
json.put("name", "engine_speed");
json.put("value", 714.0);
postData(json);

JSONObject json2 = new JSONObject();
json.put("timestamp", 1351181576.7207818);
json.put("name", "steering_wheel_angle");
json.put("value", 11.1633);
postData(json2);

您没有将任何数据放入 json2,而是修改 json。然后,您将完全未修改且因此为空的 json2 对象发送到 PHP,PHP 将其打印为 {} 失败。

如果您修复您的 Android 应用程序以正确填写 json2,应该可以正常工作:

            JSONObject json2 = new JSONObject(); 
json2.put("timestamp", 1351181576.7207818);
json2.put("name", "steering_wheel_angle");
json2.put("value", 11.1633);
postData(json2);

关于php - 将 JSON 数据从 Android 发送到 PHP 并写入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15963039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com