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

2024-03-28

我正在尝试获取在 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 脚本获取第一个对象并将其存储到文本文件中没有问题,但另一个对象始终读取为空,我不明白为什么。我对 PHP 和 Android 编程比较陌生,不确定我是否以正确的方式发送和接收数据。以下是我的相关Android应用程序代码片段:

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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 JSON 数据从 Android 发送到 PHP 并写入文本文件 的相关文章

  • support-library-v7 上的 ClassCastException,使用版本 21

    背景 在过去的两周里 我一直将我的应用程序从 ActionBarSherlock 转移到 Google 的官方支持库 以获得 Material Design 风格 我已经更新到最新版本 21 并且包含了 v4 和 v7 My app htt
  • 解析嵌套的 JSON Swift 3 [重复]

    这个问题在这里已经有答案了 我正在尝试在 Swift 3 中解析复杂的 JSON 文件 我在获取值时遇到问题 我找到了一些示例代码并尝试对其进行了一些调整 但它不起作用我当前收到错误 Type NSArray 没有下标成员 我什至不确定这是
  • Codeigniter 回显 [::1] 而不是 localhost

    我正在使用 CodeIgniter 3 作为 Web 平台 并尝试将语义 UI CSS 导入到我的页面中 我正在使用 CodeIgniter 来做到这一点base url 方法中的hrefCSS 导入的属性 但是 semantic css
  • 生产中的 FirebaseRemoteConfigClientException (Android)

    到目前为止我做了什么 我在用Tasks await blocking https developers google com android guides tasks blocking工作线程中的 firebase 调用机制以避免回调 我正
  • 当滚动 Recyclerview 单选按钮更改其选择时

    我正在使用 RecyclerView 设置单选按钮 选定的按钮选择在滚动时会更改其位置 请帮助我 Thanx in advance 我的 RecylerView 布局
  • 在 Visual Studio 中为“将 JSON 粘贴为类”配置类和成员名称大小写(lowerCamelCase 与 UpperCamelCase)

    考虑这个 JSON firstName John lastName Doe homeAddress streetAddress 123 Main St city Boston state MA postalCode 02110 employ
  • 不同屏幕尺寸下的VideoView

    我正在尝试插入适合不同尺寸屏幕的视频 我想要的是良好的分辨率并且不失真 我有两个适合大屏幕和小屏幕的视频 但我不知道如何插入它们 我认为这就像从可绘制文件 hdpi ldpi 等 中插入图像一样 您可以将图像添加到所需的分辨率文件夹中 但我
  • 将目录从 Assets 复制到本地目录

    我正在尝试使用资产文件夹中的目录并将其作为File 是否可以访问 Assets 目录中的某些内容File 如果没有 如何将 Assets 文件夹中的目录复制到应用程序的本地目录 我会像这样复制一个文件 try InputStream str
  • 将 C# 字符串数组序列化为 JSON 数组

    我的 Layout cshtml 文件中有以下代码 我的想法是 在我的javascript代码中填写了一些有关安全性的项目 LoggedIn和用户名显然没有问题 但是角色在javascript中的放置方式是错误的 Roles 只是一个 st
  • Android:实时图像处理

    我有一个应用程序 它进行相机预览 对每一帧执行一些基本的图像处理功能 例如边缘检测 颜色变化 图像扭曲等 并 实时 将修改后的帧显示到屏幕上 类似于Android Market中的 Paper Camera 应用程序 我的方法总结 我也做过
  • 具有多个 Item 布局的 ListView 适配器

    我正在考虑向我的 Android 应用程序添加一个带有缩略图的列表视图 左边是缩略图 右边是文字 有没有办法用单独的 xml 文件填充列表视图 例如 我可以为奥地利 英国 美国等提供单独的 xml 并将它们添加到列表视图中吗 我问的原因是
  • php 中

    的新行

    我目前在数据库中有很多笑话 这些笑话都是用 nl2br 格式化的 它会产生 This is just dummy text Lorem ipsum dolor sit amet consectetur adipiscing elit br
  • 如何解决此问题 目标 S+(版本 31 及更高版本)要求 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一

    一直试图解决这个问题但无法解决 这是 udacity 课程 我尝试使用挂起意图创建通知 但挂起意图可变存在问题 我尝试用这种方式 视图模型 private val REQUEST CODE 0 private val TRIGGER TIM
  • 使用 wp_read_audio_metadata()

    我正在尝试从 WordPress 中的 mp3 文件获取一些元数据 特别是长度变量 这是我的一些代码 这里没有显示 但我已经包含了 wp admin includes media php 文件 当我查看我的页面时http beta open
  • cmd的字符集

    C Users Kolink gt php r echo C Users Kolink gt echo 正如你所看到的 一个程序输出一个 结果是 但使用echo命令给出所需的字符 并且 我可以配置 PHP 也许是脚本开头的某个命令 来输出正
  • 如何低延迟地使用 Android 音频

    Problem 您可能听说过 Android 不提供低延迟音频 API 我所说的低延迟音频是指您应该能够从麦克风获取音频信号并播放声音 中间没有太多时间间隔 例如 5 7 毫秒 我尝试过旧的java 带有AudioRecord和AudioT
  • 无法查看数据选择器上的当前数据

    我创建了一个自定义数据选择器 其中显示 1950 年至 2016 年的年份 现在 当我第一次打开选择器时 我想设置当天的当前数据 但我无法将其设置为当前数据 第一次启动后 它的工作原理与我希望的完全一样 这是我迄今为止尝试过的代码 priv
  • 以编程方式启用和禁用自动旋转?

    有很多很酷的小部件可以在手机上启用和禁用自动旋转 禁用它会在手机上的所有应用程序中关闭它 他们如何实现这一目标有什么想法吗 这应该可以为你解决问题 import android provider Settings public static
  • 设计问题:哪种做法更好? (第2部分)

    我有一个 Web 界面 我将从中收集用户数据 用户名 密码 电子邮件等 后端必须将这些数据提供给 3 个其他系统 SystemA SystemB SystemC 配置由 3 个不同的 API 完成 每个 API 对应一个系统 A B 和 C
  • Android Studio Gradle 错误 BuildActionExecuter.withCancellationToken

    我从此链接下载了 Android Studio 最新版本 2 0 http tools android com download studio canary http tools android com download studio ca

随机推荐