[英]Android + PHP: Sending a GET request to PHP server
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. 我正在尝试将GET请求从Android应用发送到Web服务器,因此服务器会将信息存储在数据库中。
Here is the Android Application : 这是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();
}
}
}
In the accepted answer of this link: 在此链接的可接受答案中:
Android - HTTP GET Request Android-HTTP GET请求
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服务器的代码:
<?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: 在Android应用程序中包含以下** 1方法之后,出现以下错误:
1- 1-
The constructor Scheme(String, Final.MySSLSocketFactory, int) is undefined 构造函数Scheme(String,Final.MySSLSocketFactory,int)未定义
In the Line: 在行中:
return new Scheme("https", mySSLSocketFactory, 443);
2- 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() 这行有多个标记-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()
In the Line: 在行中:
class MySSLSocketFactory extends SSLSocketFactory {
3- 3
The constructor SSLSocketFactory(KeyStore) is undefined 构造函数SSLSocketFactory(KeyStore)未定义
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: 我想我只是复制了那部分代码,就像出现在问题的答案中一样:
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. 您的代码可能首先要简化,我建议您使用此android库: http : //loopj.com/android-async-http/ ,它可以发出各种HTTP请求。
After you downloaded it you should obviously import it in your project. 下载后,您显然应该将其导入项目中。
Code with Android Asynchronous Http Client implemented 使用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();
}
});
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.