【问题标题】:Kotlin POST requestKotlin POST 请求
【发布时间】:2019-02-26 08:05:58
【问题描述】:

我是 Kotlin 的新手。我想问一下 POST 请求。

我想将“nim”、“nama”和“address”edittext.text 传递到数据库。但是在我的代码中,仍然出现 Toast“发生错误”并且数据库没有得到任何数据。那我该怎么办?

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val jsonobj = JSONObject()

    jsonobj.put("nim", nim_editText.text)
    jsonobj.put("nama", nama_editText.text)
    jsonobj.put("address", address_editText.text)

    val queue = Volley.newRequestQueue(this)
    val url = "http://192.168.100.7/simplecrud/create.php"

    val req = JsonObjectRequest(Request.Method.POST,url,jsonobj,
        Listener {
            Toast.makeText(this@MainActivity, "Success", Toast.LENGTH_SHORT).show()
        },
        ErrorListener {
            Toast.makeText(this@MainActivity, "Error Occured", Toast.LENGTH_SHORT).show()
        })


    val btn = findViewById<Button>(R.id.button1)

    btn.setOnClickListener(object : View.OnClickListener {
        override fun onClick(v: View?) {
            queue.add(req)
        }
    })

这是我的 create.php 代码

    <?php

require_once('connection.php');

$nim        = $_POST['nim'];
$name       = $_POST['name'];
$address    = $_POST['address'];
$gender     = $_POST['gender'];

if(!$nim || !$name || !$address || !$gender ){
    echo json_encode(array('message'=>'required field is empty.'));
}
    else{
        $query = mysqli_query($CON, "INSERT INTO tb_student VALUES ('$nim','$name','$address','$gender')");

    if($query){
        echo json_encode(array('message'=>'student data successfully added.'));
    }
        else{
            echo json_encode(array('message'=>'student data failed to add.'));
        }
}

?>

【问题讨论】:

  • 通过Log.d(TAG, "Error: " + it.getMessage()); 在ErrorListener 中发布您的“VolleyError”对象。并且,nim_editText.text 将返回 EditText 的当前状态。如果要发送输入的数据,则应在用户单击按钮时生成 JSONObject。
  • 谢谢,我试试。但是在代码的底部,有一个OnClickListener来执行请求
  • 我的意思是这样 -> Gist
  • 我复制了您的代码,但仍然是“发生错误”
  • 你能调试一下吗?它必须包含一些关于错误的信息。

标签: android api post kotlin request


【解决方案1】:
    fun post(url: String, body: String): String {
    return URL(url)
        .openConnection()
        .let {
            it as HttpURLConnection
        }.apply {
            setRequestProperty("Content-Type", "application/json; charset=utf-8")
            requestMethod = "POST"

            doOutput = true
            val outputWriter = OutputStreamWriter(outputStream)
            outputWriter.write(body)
            outputWriter.flush()
        }.let {
            if (it.responseCode == 200) it.inputStream else it.errorStream
        }.let { streamToRead ->
            BufferedReader(InputStreamReader(streamToRead)).use {
                val response = StringBuffer()

                var inputLine = it.readLine()
                while (inputLine != null) {
                    response.append(inputLine)
                    inputLine = it.readLine()
                }
                it.close()
                response.toString()
            }
        }
}

【讨论】:

    【解决方案2】:

    确保您正在阅读该文档是您的 php 文件,因为完成的原因大多数总数不添加此文件,但 php 不再看到 android 帖子并获取标题。 当我休息时,我将在大约 15 分钟后更新一个链接供参考。

    https://stackoverflow.com/a/39508364/6915690

    【讨论】:

    • 我的 php 文件在邮递员上运行时很好,它可以从邮递员传递数据。但是当我想从 kotlin 应用程序输入数据时我很困惑。
    • 这就是我在运行诸如邮递员之类的测试时所说的......它会测试得很好。当您从 android 连接到指向 php 文件的 url 时,标头和请求方法的发送方式与以往不同。不确定为什么。您永远不会收到响应代码 200,因为对于您的 php 文件,它的读数为空白。所以它每次都发送错误代码,因为没有任何东西可以放入数据库。发布您的 php 代码,我会尽力提供帮助。在我弄清楚之前,我经历了一两个星期。
    • 谢谢。我已经在我编辑的问题上发布了我的 php 代码。
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 2021-11-03
    • 2021-03-11
    • 1970-01-01
    相关资源
    最近更新 更多