1

を使用してAndroidアプリケーションを作成しましたjava, php(backend) and mysql(database)。バックエンドphpコードとデータベースをLinuxホスティングサーバーに配置しました。私の問題は、データベースからデータを読み取ることしかできないことです。つまり、アプリケーションはサーバーからデータをフェッチできますが、フェッチされたデータに変更を加えることができず、サーバーを使用して実行するとエラーが発生します。しかし、データベースとコードをローカルシステムに配置すると、localhostで完全に機能しますが、サーバーに配置すると、データのみを読み取ることができ、データを読み取ることはできませんinsert, update or delete。サーバー内のデータベースに完全な特権をすでに与えています。誰かがこの側面に関して私を助けてくれますか?サーバーはモバイルのような部外者からのリクエストを受け付けないと思います。だから私の質問は

what do we need to do such that the server accepts requests from mobile side?

PS:サーバーのデータベースに完全な権限を付与し、Androidマニフェストファイルにインターネット権限を追加しました。

@Lie Ryan:リクエストに応じて、サーバーに接続するためのコードは次のとおりです。

 protected List<List<String>> callWebServer(String queryString, String statement){

    List<List<String>> stringList = null;
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("query", queryString));
    nameValuePairs.add(new BasicNameValuePair("statement", statement));

    try{
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(WEB_SERVICE_URL);
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        String responseBody = httpclient.execute(httppost,responseHandler);
        JSONObject json = new JSONObject(responseBody);

        if(statement.equals(DB_SELECT_STATEMENT) || statement.equals(DB_INSERT_STATEMENT)){

            List<String> queryStrings = null;
            // parsing query 
            if(statement.equals(DB_SELECT_STATEMENT)){
                queryStrings = splitQuery(queryString);


            JSONArray jArray = json.getJSONArray("output");

            if(jArray.length() > 0)
                stringList = new ArrayList<List<String>>();

            for(int i=0;i<jArray.length();i++){
                JSONObject json_data = jArray.getJSONObject(i);

                String rowData = json_data.getString("rowData");
                if(rowData.equals("nothing")){
                //  Toast.makeText(getBaseContext(), "No record found", Toast.LENGTH_LONG).show();
                }else{

                    JSONObject getClassNameObject = new JSONObject(rowData);
                    List<String> tempStringList = new ArrayList<String>();

                    for(String valueStr:queryStrings){
                        if(valueStr.contains(".")) valueStr = valueStr.split("\\.")[1];
                        tempStringList.add(getClassNameObject.getString(valueStr));
                    }

                    stringList.add(tempStringList);
                }
            }
            }else{
                JSONArray jArray = json.getJSONArray("output");
                stringList = new ArrayList<List<String>>();
                JSONObject json_data = jArray.getJSONObject(0);

                stringList.add(getList("mn", json_data.getString("rowData")));

            }
        }

        //Toast.makeText(getBaseContext(), "Event Added Successfully", Toast.LENGTH_LONG).show();
    }catch(ArrayIndexOutOfBoundsException e){

    }catch(Exception e){

        Log.e("log_tag", "Error in http connection:"+e.toString());
    }

リクエストを処理するためのphpコードは次のとおりです。

 <?php
include "connect.php";

if($_POST["statement"] == "select"){

    $booleanRow = true;
    // for select statements
    $db_output = mysql_query($_POST["query"]));
    while($row=mysql_fetch_array($db_output, MYSQL_ASSOC)){
        $output[] = array('rowData'=>$row);
        $booleanRow = false;            
    }       

    if($booleanRow){
        $row = "nothing";
        $output[] = array('rowData'=>$row);
    }

    print(json_encode(array('output'=>$output)));
}else{

    // for insert, update and delete       
    mysql_query($_POST["query"]);   

    $row = mysql_insert_id();       
    $output[] = array('rowData'=>$row);
    print(json_encode(array('output'=>$output)));
}

 mysql_close($link);
  ?>

前もって感謝します。

4

1 に答える 1

1

アプリケーションがネットワークソケットを開くことができるようにするには、Androidマニフェストファイル(AndroidManifest.xml)で「android.permission.INTERNET」権限を設定する必要があります。

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

その他の権限のリストについては、Manifest.Permissionクラスを参照してください。

于 2012-04-13T11:36:23.113 に答える