Android + PHP: Sending a GET request to PHP server

2019-04-02 18:02发布

I'm trying to send a GET request from an Android app to a web server, so the server will store the information in a database.

Here is the Android Application:

public class Final extends Activity {


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_final);


        Button btnSend = (Button)findViewById(R.id.BtnSend);



        btnSend.setOnClickListener(new OnClickListener(){

        public void onClick(View arg0){

                TestReceiver();


            }
        });



    void TestReceiver()
    {

            //ALERT MESSAGE
            Toast.makeText(getBaseContext(),"Please wait, connecting to server.",Toast.LENGTH_LONG).show();

            HttpClient Client = new DefaultHttpClient();

            try
            {

                Client.getConnectionManager().getSchemeRegistry().register(getMockedScheme());

            } catch (Exception e) {
                System.out.println("Error con no se que");
            }


            String Value="Kevin";

            String URL = "http://echogame24.comli.com/Receiver.php?action="+Value;


            try
            {
                          String SetServerString = "";

                        // Create Request to server and get response

                         HttpGet httpget = new HttpGet(URL);
                         ResponseHandler<String> responseHandler = new BasicResponseHandler();
                         SetServerString = Client.execute(httpget, responseHandler);

             }
           catch(Exception ex)
           {
                    System.out.println("Fail!");
           }

    }



   //** I added all this following the advise in the link below


    public Scheme getMockedScheme() throws Exception {
        MySSLSocketFactory mySSLSocketFactory = new MySSLSocketFactory();
        return new Scheme("https", (SocketFactory) mySSLSocketFactory, 443);
    }

    class MySSLSocketFactory extends SSLSocketFactory {
        javax.net.ssl.SSLSocketFactory socketFactory = null;

        public MySSLSocketFactory(KeyStore truststore) throws Exception {
            super(truststore);
            socketFactory = getSSLSocketFactory();
        }

        public MySSLSocketFactory() throws Exception {
            this(null);
        }

        @Override
        public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException,
                UnknownHostException {
            return socketFactory.createSocket(socket, host, port, autoClose);
        }

        @Override
        public Socket createSocket() throws IOException {
            return socketFactory.createSocket();
        }

        javax.net.ssl.SSLSocketFactory getSSLSocketFactory() throws Exception {
            SSLContext sslContext = SSLContext.getInstance("TLS");

            TrustManager tm = new X509TrustManager() {
                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }
                public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            };
            sslContext.init(null, new TrustManager[] { tm }, null);
            return sslContext.getSocketFactory();
        }
    }


}

In the accepted answer of this link:

Android - HTTP GET Request

They recommend to use the last methods so the application can send request to any server.

I also include the code of the PHP server that will accept the request:

 <?php



$name="A_".$_GET["action"] ;




    require_once('mysql_conexion.php');

    //Here we set the variables

    $country = "Prueba"; 
    $score = 200;

    //Here we create the sql sentence we will need to insert information in the Data base   
    $q="INSERT INTO PLAYERS(NAME, COUNTRY, SCORE) VALUES ('$name', '$country', '$score')";
    $r=@mysqli_query($dbc, $q);


    //Now we check if we succed or failed
    if($r){

    //This means we did it right

    echo 'There is a new player<br>';


    }else{

    //This means we failed

    echo '<h1>Error </h1>
    <p class="error">There was an error</p>';
    echo '<p>'.mysqli_error($dbc).'<br /><br />Query:'.$q.'</p>';

    }

    //We close now the data base connection

    mysqli_close($dbc);


?>

My Problems:

After including in the Android Application the methods below **1 I have the following errors:

1-

The constructor Scheme(String, Final.MySSLSocketFactory, int) is undefined

In the Line:

return new Scheme("https", mySSLSocketFactory, 443);

2-

Multiple markers at this line - The type Final.MySSLSocketFactory must implement the inherited abstract method SocketFactory.createSocket(InetAddress, int, InetAddress, int) - The type Final.MySSLSocketFactory must implement the inherited abstract method SocketFactory.createSocket(String, int) - The type Final.MySSLSocketFactory must implement the inherited abstract method SSLSocketFactory.getSupportedCipherSuites() - The type Final.MySSLSocketFactory must implement the inherited abstract method SocketFactory.createSocket(InetAddress, int) - The type Final.MySSLSocketFactory must implement the inherited abstract method SocketFactory.createSocket(String, int, InetAddress, int) - The type Final.MySSLSocketFactory must implement the inherited abstract method SSLSocketFactory.getDefaultCipherSuites()

In the Line:

class MySSLSocketFactory extends SSLSocketFactory {

3-

The constructor SSLSocketFactory(KeyStore) is undefined

In the line:

super(truststore);

Could anyone tell me what am I doing wrong? I think I just copied that part of the code exactly like appear in the accpeted answer for the question:

Android - HTTP GET Request

标签: php android get
1条回答
smile是对你的礼貌
2楼-- · 2019-04-02 18:50

Your code could be first of all simplified, i suggest you to use this android library: http://loopj.com/android-async-http/ which allows you to make every kind of HTTP requests.

After you downloaded it you should obviously import it in your project.

Code with Android Asynchronous Http Client implemented

public class Final extends Activity {

AsyncHttpClient client = new AsyncHttpClient();
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_final);


    Button btnSend = (Button)findViewById(R.id.BtnSend);



    btnSend.setOnClickListener(new OnClickListener(){

    public void onClick(View arg0){

            TestReceiver();


        }
    });



void TestReceiver()
{

        //ALERT MESSAGE
        Toast.makeText(getBaseContext(),"Please wait, connecting to server.",Toast.LENGTH_LONG).show();
        String Value="Kevin";

        String url = "http://echogame24.comli.com/Receiver.php?action="+Value;


        client.get(url, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(String response) {
                Toast.makeText(getBaseContext(),"Request made successfully.",Toast.LENGTH_LONG).show();
            }
        });

    }
}


}
查看更多
登录 后发表回答