1

Android から 3G 経由でサーバーへの接続を作成したいのですが、失敗しました。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;
}

}

4

1 に答える 1

2

これはローカルに接続しようとしています。

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

ローカル マシンに接続していなくてもアクセスできるサーバー上にコードがありますか? それはあなたが投稿する必要があるURLです!

192.168.1.1 は、Linksys ルーター (およびおそらく他のルーター) によって使用されるデフォルトの IP アドレスです: http://www.tech-faq.com/192-168-1-1.html

そのため、wifi 経由でこのルーターに接続すると、@ 192.168.1.1:80 に保存されているソースにアクセスできますが、3g 経由ではこのルーターに接続されなくなります。リモートでファイルにアクセスするには、別の方法でファイルをホストする必要があります...サーバーをセットアップしたり、Web ホスティング サービスを介してファイルをホストしたりします。

于 2012-07-13T18:04:07.580 に答える