亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么輸出流寫入器不寫入數據?

為什么輸出流寫入器不寫入數據?

慕斯709654 2022-09-14 10:25:28
我對Android編程非常陌生,我對輸出流編寫器有問題?,F在我正在研究簡單的測試應用程序,以向服務器發送POST請求。服務器端有一個PHP應用程序,旨在將數據寫入txt文件。當我運行我的Android應用程序時,它會通過代碼并執行“最終”塊中的命令。服務器確實寫入 txt 文件,但它放置了空數據。我也嘗試過使用GET方法,并嘗試檢查請求數組。但不會發送任何數據。如果我從我的代碼中刪除輸出流作家,我會得到相同的圖片,所以它根本不起作用。我也嘗試使用編碼,結果相同。我通過類似的問題做了:輸出流編寫器不寫入 - 寫入文件和問題是它的創建;安卓,爪哇:HTTP POST請求 - 這里和其他一些問題被使用httpClient,現在已經被取消了。HttpUrl連接得到輸出流有倍數,HttpUrl連接得到輸出流有多倍 - 這里網絡在主線程,但我的運行在另一個線程上;安卓開機自檢請求不起作用,Java連接輸出流編寫器為空 - 建議使用讀卡器接收輸入流。我嘗試過這個解決方案,但結果是一樣的(沒有發送數據)我的安卓版本6.0.1。問題可能出在哪里?package com.victoria.requester;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import java.io.*;import java.net.*;import android.widget.TextView;import java.io.IOException;import java.net.URL;import java.net.HttpURLConnection;public class MainActivity extends AppCompatActivity {    public final static String EXTRA_MESSAGE = "EXTRA_MESSAGE";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        thread.start();    }    Thread thread = new Thread(new Runnable() {        @Override        public void run() {            String url = "http://192.168.56.226:90/wfile.php";            String f_name = "123";            HttpURLConnection httpCon = null;            TextView textView = findViewById(R.id.textView);            textView.setText("OK1!");            try {                textView.setText("OK2!");                URL urlObj = new URL(url);                httpCon = (HttpURLConnection) urlObj.openConnection();                httpCon.setDoInput(true);                httpCon.setDoOutput(true);                //httpCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");                httpCon.setRequestProperty("Content-Type", "text/html");                httpCon.setRequestMethod("POST");
查看完整描述

2 回答

?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

所以,我終于解決了我的問題,這實際上很復雜。首先,謝謝你,@Stephen C。當我在獲取輸出流()之后移動響應代碼時,我的服務器開始接收請求。重要的是,如果不調用 getResponseCode,則不會發送數據。


但第二個問題是字符串:字符串參數=“f_name”+f_name;


由于我丟失了“=”,POST數組中元素的名稱是“f_name123”,值為空))))這就是為什么我無法從$_POST[“f_name”)中獲取數據的原因。


另外,我想注意到,只有在連接內訪問時,textview才起作用。斷開連接后,您可以使用文本視圖。


感謝大家的幫助。


下一個代碼現在對我有用:



package com.victoria.requester;


import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import java.io.*;

import java.net.*;

import android.widget.TextView;

import java.io.IOException;

import java.net.URL;

import java.net.HttpURLConnection;





public class MainActivity extends AppCompatActivity {


    public final static String EXTRA_MESSAGE = "EXTRA_MESSAGE";


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        thread.start();

    }





    Thread thread;


    {

        thread = new Thread(new Runnable() {


            @Override

            public void run() {

                String url = "http://192.168.56.226:90/wfile.php";

                String f_name = "123";

                HttpURLConnection httpCon = null;

                TextView textView = findViewById(R.id.textView);



                try {

                    URL urlObj = new URL(url);

                    httpCon = (HttpURLConnection) urlObj.openConnection();


                    httpCon.setDoOutput(true);

                    httpCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");


                    httpCon.setRequestMethod("POST");


                    String parameters = "f_name=" + f_name;






                    OutputStreamWriter writer = new 

 OutputStreamWriter(httpCon.getOutputStream());

                    writer.write(parameters);

                    writer.flush();



                    writer.close();


                    httpCon.getResponseCode(); 



                } catch (MalformedURLException e) {

                    textView.setText("bad  URL!");

                } catch (IOException e) {

                    textView.setText("network error!");

                } finally {

                    httpCon.disconnect();

                    textView.setText("All done");



                }

            }

        });

    }


}


查看完整回答
反對 回復 2022-09-14
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

問題是您在調用 調用并寫入請求數據。httpCon.getOutputStream()httpCon.getResponseCode()

正確的順序是:

  1. 調用以獲取 URL 的連接對象getConnection()

  2. 按任何順序:

    • 設置請求方法

    • 設置任何請求屬性

    • 調用,因為您打算使用輸出流。setDoOutput(true)

  3. getOutputStream()

  4. 寫入數據。

  5. 關閉流。

  6. 獲取響應代碼。

您當前正在執行的操作將在調用 時引發異常。遠程服務器只有在讀取請求數據才能向您發送響應。當您調用它時,告訴客戶端堆棧向服務器指示沒有更多的請求數據。getOutputStreamgetResponseCode()

此外,如果您不打算在某些情況下從連接中讀取數據,則不應調用。至少它是多余的。setDoInput(true)


查看完整回答
反對 回復 2022-09-14
  • 2 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號