对PHP服务器Android Studio的HTTP POST请求

对PHP服务器Android Studio的HTTP POST请求,android,Android,公共类MainActivity扩展了AppCompatActivity{ EditText editmsg , editmail ; TextView content ; String Message , Email ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activit

公共类MainActivity扩展了AppCompatActivity{

EditText editmsg , editmail ;
TextView content ;
String Message , Email ;

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

    editmsg = (EditText) findViewById(R.id.editMessage);
    editmail = (EditText) findViewById(R.id.editMail);
    Button btnsubmit = (Button) findViewById(R.id.btnSubmit);
    btnsubmit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                GetText();
            } catch (Exception ex) {
                content.setText(" Url Exception!");
            }
        }
    });
}

public void GetText()throws UnsupportedEncodingException {

    Message = editmsg.getText().toString();
    Email = editmail.getText().toString();

    String data = URLEncoder.encode("message", "UTF-8")
            + "=" + URLEncoder.encode(Message, "UTF-8");

    data += "&" + URLEncoder.encode("email", "UTF-8") + "="
            + URLEncoder.encode(Email, "UTF-8");

    String text = "";
    BufferedReader reader=null;
    HttpURLConnection urlConnection = null;

    try
    {

        // Defined URL  where to send data
        URL url = new URL("http://nitesh.com/feedback/add.php");

        // Send POST data request


        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("POST");
        urlConnection.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(urlConnection.getOutputStream());
        wr.write( data );
        wr.flush();

        // Get the server response

        reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
        StringBuilder sb = new StringBuilder();
        String line = null;

        // Read Server Response
        while((line = reader.readLine()) != null)
        {
            // Append server response in string
            sb.append(line + "\n");
        }


        text = sb.toString();
    }
    catch(Exception ex)
    {

    }
    finally
    {
        try
        {

            reader.close();
        }

        catch(Exception ex) {}
    }

    // Show response on activity
    content.setText( text  );

}
}

我不知道什么是错误的代码,当我点击发送按钮,它显示不幸的是,HTTP已经停止(看起来就像应用程序崩溃)。
请检查我的代码并告诉我我做错了什么。

我立刻看到的一件事是,您正在主UI线程(在
onCreate
中)中发出请求。这是不允许的,因为网络连接通常需要一些时间才能完成。日志猫中也应该有关于此的错误消息

您应该做的是在单独的线程中提出请求。您可以使用
AsyncTask
Thread
来完成此任务。谷歌

UPD:

关于如何在Java中使用线程的示例。方法
run
将异步执行

new Thread(new Runnable(){
  @Override
  public void run(){
    GetText();
  }
}).start();
下次,请将logcat错误包括在问题中。

考虑将其用于网络通信


您将获得一个简单的api,所有请求都将被包装到正确的线程中。

您可以使用
异步任务来完成此任务。

致命异常:main java.lang。NullPointerException@Nitesh之所以会出现这种情况,是因为在catch块中,
content
为空。在
onCreate
中定义它。如果您不介意,请更正我的代码。这样我才能了解整个情况situation@NiteshKhaitan很抱歉迟了答复。请看编辑。如果你要为Android编程,你应该习惯在不同的线程中创建和做事情。使用专门的库来实现这一点是过分的。这不是线程库,而是Android和Java的类型安全HTTP客户端