当前位置: 首页 > 知识库问答 >
问题:

Android Http POST请求不工作

郎和志
2023-03-14
package com.example.webtestconnection;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    private Button login;
    private EditText username, password;

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

        login = (Button) findViewById(R.id.ok);
        username = (EditText) findViewById(R.id.name);
        password = (EditText) findViewById(R.id.password);

        login.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                String   mUsername = username.getText().toString();
                String  mPassword = password.getText().toString();

                tryLogin(mUsername, mPassword);
            }
        });
    }

    protected void tryLogin(String mUsername, String mPassword)
    {
        HttpURLConnection connection;
        OutputStreamWriter request = null;

        URL url = null;
        String response = null;
        String parameters = "username="+mUsername+"&password="+mPassword;

        try
        {
            url = new URL("http://welovelamacompany.altervista.org/test2.php");
            connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            connection.setRequestMethod("POST");

            request = new OutputStreamWriter(connection.getOutputStream());
            request.write(parameters);
            request.flush();
            request.close();
            String line = "";
            InputStreamReader isr = new InputStreamReader(connection.getInputStream());
            BufferedReader reader = new BufferedReader(isr);
            StringBuilder sb = new StringBuilder();
            while ((line = reader.readLine()) != null)
            {
                sb.append(line + "\n");
            }
            // Response from server after login process will be stored in response variable.
            response = sb.toString();
            // You can perform UI operations here
            Toast.makeText(this,"Message from Server: \n"+ response, Toast.LENGTH_LONG).show();
            isr.close();
            reader.close();

        }
        catch(IOException e)
        {
            // Error
        }
    }
}
<?php
//impostazioni server phpmyadmin per poter accedere al db
    $servername = "servername";
    $username = "username";
    $password = "password";
    $databasename = "my_databasename";
    $Nome_Giocatore = $_POST['username'];
    $PasswordGiocatore = $_POST['password'];
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$databasename", $username, $password);
        //imposto una modalità di eccezzione errore
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        //stampo che la connessione è riuscita
        $sql=$conn->query("SELECT Password_Giocatore FROM Giocatori WHERE Nome_Giocatore=\"$Nome_Giocatore\"");
        $control = $sql->fetch();
        $controllo=$control['Password_Giocatore'];
        if (password_verify($PasswordGiocatore, $controllo)){
            echo "Success";
        } else {
            echo "Error";
        }
        $conn->exec($sql);
    } catch(PDOException $e){
                    //stampo che la connessione è fallita e l'errore che ha causato il fallimento
                    echo "Qualcosa è andato storto :(. Errore: <br/>".$e->getMessage();
                }
    $conn = null;
?>

但当我运行它时,它会给我这个错误:

E/AndroidRuntime:致命异常:主进程:com.example.webTestConnection,PID:23550 Android.os.networkonMaintHreadexception,Android.os.strictmode$AndroidBlockGuardPolicy.onNetwork(strictmode.java:1166),java.net.inetAddress.java:385),java.net.inetAddress.lookupHostByName(inetAddress.java:385),java.net.inetAddress.getAllByNameImpl(p.internal.http.httpurlConnectionImpl.Connect(httpurlConnectionImpl.java:89)在com.android.okhttp.internal.http.httpurlConnectionImpl.getOutputStream(httpurlConnectionImpl.java:197)在com.example.webtestConnection.mainactivity.tryLogin(mainactivity.java:62)在com.example.webtestConnection.mainactivity$1。onclick(mainactivity.java:40)在android.view.view.performClick

为什么?我该怎么修好它?谢谢你的帮助

附注。我在舱单上有上网权限

共有1个答案

唐默
2023-03-14

请使用AsyncTask进行API调用,因为您是在主线程上调用它,所以会得到异常。

class LoginTask extends AsyncTask<String, Void, RSSFeed> {

    private Exception exception;

    protected YourResponse doInBackground(String... urls) {
        try {
             URL url = new URL(urls[0]);
            //your login code
        } catch (Exception e) {
            this.exception = e;
        } 
    }
    protected void onPostExecute(YourResponse response) {
        // TODO: check this.exception
        // TODO: do something with the feed
    }
}

并在代码中添加这一行

new LoginTask().execute(url);

编辑后,您可以在网络调用的库下面进行操作,使网络调用更加容易和优化

    null
 类似资料:
  • 我正在这样做: 但是请求在服务器上不起作用。。。在服务器上,我应该看到发送的数据,但我看不到它们 我也试过这个: 而且它是有效的。。。有什么问题吗?

  • 在简单的我的表单,我想使用ajax与和获取和发布请求后,使用和提交表单我的页面是刷新和警报不工作的控制器验证。 控制器中的简单请求ajax无法正常工作 我的形式: 我的控制器: 我的路线:

  • 我有一个和一个。点击按钮,我想打开键盘,同时请求关注,以便用户直接开始在键盘上键入文本,并出现在中。但是在我的例子中,当我点击按钮时,它会打开键盘,但它不会将焦点设置在上,因为用户必须再次单击才能在上面写入。问题是什么。任何帮助或建议。 单击按钮时的代码

  • 下面的测试不使用mocha-chai,它能够获得输入请求,但抛出错误消息。 输出: Web请求:/HB::Error:超时2000ms。确保在此测试中调用了done()回调。

  • 我正在用GoogleVolley Api创建一个android应用程序,它处理我的应用程序和php脚本之间的连接。出于某种原因,该应用程序没有向我的服务器发送任何数据,也许这里的某个人可以找到它? 我的方法被正确调用,但是当我尝试打印它时,它返回null!一切实际上都在工作,除了数据没有正确传递,我相信,因为我的php脚本抱怨变量为空

  • 我正在使用Android截击来发出请求。所以我使用这个代码。我不明白一件事。我在服务器中检查params是否始终为null。我认为GETPARAMS()不工作。我应该做些什么来解决这个问题。