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");
}
}
});
}
}

TA貢獻1815條經驗 獲得超13個贊
問題是您在調用 后調用并寫入請求數據。httpCon.getOutputStream()
httpCon.getResponseCode()
正確的順序是:
調用以獲取 URL 的連接對象
getConnection()
按任何順序:
設置請求方法
設置任何請求屬性
調用,因為您打算使用輸出流。
setDoOutput(true)
叫
getOutputStream()
寫入數據。
關閉流。
獲取響應代碼。
您當前正在執行的操作將在調用 時引發異常。遠程服務器只有在讀取請求數據后才能向您發送響應。當您調用它時,告訴客戶端堆棧向服務器指示沒有更多的請求數據。getOutputStream
getResponseCode()
此外,如果您不打算在某些情況下從連接中讀取數據,則不應調用。至少它是多余的。setDoInput(true)
添加回答
舉報