Android + PHP:向PHP服务器发送GET请求

时间:2014-05-27 22:33:54

标签: php android get

我试图将Android应用程序的GET请求发送到Web服务器,因此服务器会将信息存储在数据库中。

以下是 Android应用

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


}

在此链接的接受答案中:

Android - HTTP GET Request

他们建议使用最后的方法,以便应用程序可以向任何服务器发送请求。

我还包括将接受请求的 PHP服务器的代码:

 <?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);


?>

我的问题

在Android应用程序中包含以下方法** 1我有以下错误:

1 -

构造函数Scheme(String,Final.MySSLSocketFactory,int)未定义

在线:

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

2 -

此行有多个标记      - Final.MySSLSocketFactory类型必须实现继承的抽象方法SocketFactory.createSocket(InetAddress,int,      InetAddress,int)      - Final.MySSLSocketFactory类型必须实现继承的抽象方法SocketFactory.createSocket(String,int)      - Final.MySSLSocketFactory类型必须实现继承的抽象方法SSLSocketFactory.getSupportedCipherSuites()      - Final.MySSLSocketFactory类型必须实现继承的抽象方法SocketFactory.createSocket(InetAddress,int)      - Final.MySSLSocketFactory类型必须实现继承的抽象方法SocketFactory.createSocket(String,int,InetAddress,      INT)      - Final.MySSLSocketFactory类型必须实现继承的抽象方法SSLSocketFactory.getDefaultCipherSuites()

在线:

class MySSLSocketFactory extends SSLSocketFactory {

3 -

构造函数SSLSocketFactory(KeyStore)未定义

在行中:

super(truststore);

有谁能告诉我,我做错了什么?我想我只是复制了代码的那部分,就像在问题的答案中出现一样:

Android - HTTP GET Request

1 个答案:

答案 0 :(得分:0)

你的代码首先可以简化,我建议你使用这个android库: http://loopj.com/android-async-http/允许您发出各种HTTP请求。

下载后,您显然应该将其导入项目中。

实施Android异步Http客户端的代码

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

    }
}


}