通过 Android 3g 连接到服务器并从 phpmyadmin 检索数据

Posted

技术标签:

【中文标题】通过 Android 3g 连接到服务器并从 phpmyadmin 检索数据【英文标题】:Connecting to a server through Android 3g and retrieving data from phpmyadmin 【发布时间】:2012-07-13 08:18:22 【问题描述】:

我想通过 3G 创建从我的 android 到服务器的连接,但我没有成功。 如果 Android 手机通过 wifi 连接并且它与我的服务器是同一个 wifi,我会成功。 你能帮我,给我一段代码吗?

这是我的代码,首先是请求我的数据库的 php

<?php
// on se connecte à notre base  pour recuperer les data
$base = mysql_connect ('localhost', 'root', ''); 
mysql_select_db ('routelibre', $base) ;  
$variable = $_GET['variable'];
$first_token  = strtok($variable, ";;");
$second_token = strtok(";;");
$req =mysql_query("SELECT message from messages where departement='$first_token' AND            voie='$second_token'");
$output=array();
while ($row=mysql_fetch_array($req))     
$output[]=$row;    
 
//on encode en JSON 
print(json_encode($output));
mysql_free_result ($req);  
?>

这是安卓的代码:

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;  
import android.content.Context;
import android.net.ParseException;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import android.content.Context;


 public class ConnexionSQL  
public void ConnexionSQLActivity();

public ArrayList<String> ConnexionBD(String dataFromHMI, Context context) 
    String result = null;
    InputStream is = null;
    JSONObject json_data=null;
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    ArrayList<String> lesMessages = new ArrayList<String>();

    StrictMode.ThreadPolicy policy = new 

            StrictMode.ThreadPolicy.Builder().permitAll().build();

    StrictMode.setThreadPolicy(policy); 

    try
        //commandes httpClient
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new 

                    HttpPost("http://192.168.1.1:80/connexion_mysql.php?variable=" + dataFromHMI);
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
    
    catch(Exception e)
        Log.i("taghttppost",""+e.toString());
        Toast.makeText(context,e.toString() ,Toast.LENGTH_LONG).show();
    


    //conversion de la réponse en chaine de caractère
    try
    
        BufferedReader reader = new BufferedReader(new 

        InputStreamReader(is,"UTF-8"));

        StringBuilder sb  = new StringBuilder();

        String line = null;

        while ((line = reader.readLine()) != null) 
        
            sb.append(line + "\n");
        

        is.close();

        result = sb.toString();
    
    catch(Exception e)
    
        Log.i("tagconvertstr",""+e.toString());
    
    //recuperation des donnees json
    try
        JSONArray jArray = new JSONArray(result);

        for(int i=0;i<jArray.length();i++)
        

            json_data = jArray.getJSONObject(i);
            lesMessages.add(json_data.getString("message"));
            //r.add(json_data.getString("categorie"));

        
    
    catch(JSONException e)
        Log.i("tagjsonexp",""+e.toString());
     catch (ParseException e) 
        Log.i("tagjsonpars",""+e.toString());
    
    return lesMessages;

【问题讨论】:

【参考方案1】:

这是尝试本地连接。

HttpPost("http://192.168.1.1:80/connexion_mysql.php?variable=" + dataFromHMI);

您的代码是否在您可以在未连接到本地计算机时访问的服务器上?那是您需要发布到的网址!

192.168.1.1 是 Linksys 路由器(可能还有其他路由器)使用的默认 IP 地址:http://www.tech-faq.com/192-168-1-1.html

因此,当您通过 wifi 连接到此路由器时,您无法访问存储在 @192.168.1.1:80 的资源,但超过 3g 您将不再连接到此路由器。您需要以另一种方式托管您的文件...通过设置服务器、通过网络托管服务托管您的文件等...以便远程访问这些文件!

【讨论】:

对不起,如果这没有意义...我有点匆忙...随时提问 我没有服务器,只在我的电脑上。你能解释一下我没看懂吗? 嗯,其中一部分是您必须做出的决定!如果您选择使用网络托管服务托管文件,我建议您查看以下列表:top10bestwebhostings.com/… 好的,如果我托管我的数据库,源代码会受到怎样的影响? 我不确定其他替代方案或如何实施它们!

以上是关于通过 Android 3g 连接到服务器并从 phpmyadmin 检索数据的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式通过 ipad 检测并连接到 3G 网络

获取用于从 Android 设备连接到 Firebase 的 IP 地址 [重复]

vmware 设置访客静态 ip 地址,主机通过 3G 调制解调器连接到专用网络

在没有网络访问的本地 wifi 上强制 Android 使用 3G

iOS - 使用 3G 随机“无法连接到主机”

FusedLocationProviderClient 无法通过 3G 或 4G 网络获取 GPS 位置,除非先连接到 WIFI 网络