2016-06-14 8 views
-5

サーバーからデータを取得し、変数として保存する方法。 コードはありません私に何か考えてください..!サーバーからデータを取得し、それらを変数としてAndroidに保存する

+1

Googleに会ったことがありますか? – zanderwar

+0

ウェブサービスを呼び出してサーバーからデータを取得し、アプリケーションで使用したいと考えているので、質問を指定してください。しかし、これを行うときに直面している問題は非常に具体的でなければなりません –

答えて

-1

これを行う最も良い方法は、PHPとVolleyを使用することです。 Volleyは高速かつ効率的な図書館です。 PHPは、サーバーからデータを取得するのに役立ちます。あなたのAndroidアプリはJSON形式のデータを受け取り、変数として保存することができます。チュートリアルについてはAndroid Hiveをご覧ください。

0

ファイル

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

DatabaseOperations.java

public String[][] getDatFromServer(String parameter1, String parameter2){ 
     String line, result, column1AsString = "", column2AsString = "", column3AsString = ""; 
     String[][] detailsArray; 
     try{ 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
      try { 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost("http://www.example.or/folderName/getDetails.php"); 
       List<NameValuePair> nameValuePairs = new ArrayList<>(); 
       nameValuePairs.add(new BasicNameValuePair("parameter1", parameter1)); 
       nameValuePairs.add(new BasicNameValuePair("parameter2", parameter2)); 
       httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpResponse response = httpclient.execute(httpPost); 
       HttpEntity entity = response.getEntity(); 
       is = entity.getContent(); 
      } 
      catch (Exception ex) { 
       return null; 
      } 
     } 
     catch(Exception ex){ 
      return null; 
     } 

     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 

      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      result = sb.toString(); 
      is.close(); 
     } 
     catch (Exception ex) { 
      return null; 
     } 
     try { 
      JSONArray jArray = new JSONArray(result); 
      int count = jArray.length(); 
      for (int i = 0; i < count; i++) { 
       JSONObject jObject = jArray.getJSONObject(i); 
       column1AsString += jObject.getString("columnName1") + "#"; //data type of column in DB is VARCHAR 
       column2AsString += jObject.getString("columnName2") + "#"; //data type of column in DB is VARCHAR 
       column3AsString += jObject.getString("columnName3") + "#"; //data type of column in DB is VARCHAR 
      } 
      detailsArray = new String[][]{ column1AsString.split("#"), column2AsString.split("#"), column3AsString.split("#") }; 
      return detailsArray; 
     } catch (Exception ex) { 
      return null; 
     } 
    } 

getDetails.php

<?php 
$parameter1 = $_REQUEST['parameter1']; 
$parameter2 = $_REQUEST['parameter2']; 

include_once("connection.php"); 

$query = "SELECT columnName1, columnName2, columnName3 FROM tableName WHERE searchingColumn1 ='$parameter1' AND searchingColumn2 = '$parameter2'"; 

$results = mysqli_query($connection, $query) or die("unable to execute the query"); 

while($rows = mysqli_fetch_array($results)){ 
    $ress[] = $rows; 
} 

print json_encode(utf8ize($ress), JSON_UNESCAPED_SLASHES); 


function utf8ize($d) { 
    if (is_array($d)) { 
     foreach ($d as $k => $v) { 
      $d[$k] = utf8ize($v); 
     } 
    } else if (is_string ($d)) { 
     return utf8_encode($d); 
    } 
    return $d; 
} 
?> 
をマニフェストにこれを追加

connection.php

<?php 
$connection = mysqli_connect("ServerHostURL", "Username", "Password", "DatabaseName") or die("unable to connect to the database"); 
?> 

変数にデータを格納するためにあなたの活動にこれらの行を追加します。

class DBSynchronization extends AsyncTask<String, Void, String[][]> { 
     @Override 
     protected String[][] doInBackground(String... urls) { 
      try{ 
     String[][] data = dbOperations.getDatFromServer("your_parameter_1", "your_parameter_2"); // if you don't need to filter data from DB, change "getDatFromServer" method signature (No parameter) and remove NameValuePair 
       return data;  
     } 
     catch(Exception e){ 
     return null; 
     } 

     } 

     @Override 
     protected void onPostExecute(String[][] result) { 

     if(result == null){ 
      // action for run when network connection was down or no data in DB 
     } 

      else{ 
      myDataArray1 = result[0]; 
      myDataArray2 = result[1]; 
      myDataArray3 = result[2]; 
      Toast.makeText(context, "Successfully saved data to arrays", Toast.LENGTH_SHORT).show(); 
     } 
     } 
    } 

は、このAsyncTaskを実行し、これらの線

DatabaseOperations dbOperations = new DatabaseOperations(); 
String[] myDataArray1, myDataArray2, myDataArray3; 

new DBSynchronization().execute(); 

DB同期はメインスレッド内で実行する場合、アプリケーションがクラッシュすることができ、ので、私はAsyncTask内DBSynchronizationを追加

を追加します。同期がバックグラウンドで実行されている場合、ユーザーはクラッシュすることなくアプリケーションを使用できます。

関連する問題