2017-08-23 19 views
0

MySQL PHPからJSONオブジェクトでAndroidにデータを取得しようとしましたが、私とは連携しません。私は自分の問題を探していましたが、私が見つけた例は私を助けませんでした。jsonでMySQLデータをアンドロイドに取得する方法

私は文字列の配列リストを持っている、私はMySQL DBの文字列を設定します。 その後、JSONで都市の文字列をDBから取得したいのですが、失敗しました。

私の質問は以下のとおりです。

  1. どのように私は私が街を持っている場合、それが再び表示されないことを確認することができますか?
  2. Androidのアレイリストで都市を設定するにはどうすればよいですか?

私のPHPコード:

<?php 
include 'connection/connection.php'; 
$noResult = "no results"; 



    // to set the names at the list view 
$sql = "SELECT workrCity FROM workersTable "; 


$result = $connect->query($sql); 

if ($result->num_rows > 0){ 
while($row[] = $result->fetch_assoc()) { 

$json = json_encode($row,JSON_UNESCAPED_UNICODE); 

} 
} else { 
echo $noResult; 
} 
echo $json; 
$connect->close(); 
?> 

私のフラグメントの配列リスト機能は良い作業:

private ArrayList<City> initCities() { 
    Log.d(TAG, "ArrayList_CitiesFragment_initCities"); 
    String[] cityName = {"","","",""}; // the cities names 
    ArrayList<City> theCities = new ArrayList<>(); 
    for (String aCityName : cityName) { 
     City city = new City(aCityName, false); 
     theCities.add(city); 
    } 
    return theCities; 
} 

を今、私はJSONのような出力でのMySQLから都市名を取得したいです:

 handler = new Handler(Looper.getMainLooper()); 
    Thread runner = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      Log.d(TAG, " runner"); 
      GetCitiesJson getCitiesJson = new GetCitiesJson(); 
      try{ 

       String[] res = getCitiesJson.getCitiesDataFromDB(); 
       JSONObject jsonObject = new JSONObject(String.valueOf(res)); 
       JSONObject workrCity = jsonObject.getJSONObject("workrCity"); 
       Activity activity = getActivity(); 
       Toast.makeText(activity,"its :" + workrCity, Toast.LENGTH_SHORT).show(); 

      } catch (IOException | JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    runner.start(); 

私のコードは正しくないが、何が欠けているか知っている...

+0

アプリケーションがjsonの解析で例外をスローしたくない場合は、 'echo $ noResult'をjson encodeする必要があります。 –

答えて

0

こんにちは:私は私のサーバーからJsonファイルを取得するために、Volleyライブラリを使用し、正常に動作します。依存関係の下でアプリ/ build.gradleで

compile 'com.android.volley:volley:1.0.0'

その後、あなたはJSONデータを取得したいアクティビティに:

String from = "http://www.yourserver.com/file.json"; 
StringRequest request = new StringRequest(from, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String string) { 
       try { 
        parseJson(URLDecoder.decode(URLEncoder.encode(string, "iso8859-1"),"UTF-8")); 
       } catch (UnsupportedEncodingException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError volleyError) { 
       // Error 
       Log.d("ERROR:", String.valueOf(volleyError)); 
      } 
     }); 

     Volley.newRequestQueue(this).add(request); 

その後、あなたはJSONを解析することができます

public static void parseJson(String jsonString) { 

    try { 
     JSONObject object = new JSONObject(jsonString); 
     getMessage(this, object); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

最後に、あなたのJson内の文字列を取得することができます:

public static void getMessage(JSONObject object){ 
if(object.length() != 0) { 
try { 

      message = String.valueOf(object.get("message")); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
} } 
+0

コードをコピーしました。しかし、1つの問題があります。 'message = String.valueOf(object.get(" message "));' varという名前のメッセージはどこですか?それは赤い色です。 – hasan

0

私はコードをコピーしました。 1つの問題があります。message = String.valueOf(object.get("message"));はどこにvarという名前のメッセージですか?それは赤い色の上です

0

メッセージは文字列です:String message;あなたのJsonでは、それを得るためにメッセージと呼ばれるノードが必要です。

関連する問題