2016-08-13 13 views
0

私はアンドロイドとPHPの両方のモバイル開発に慣れています。ありがとう。非公式リクエストの結果が投稿後に更新されないvolley

必要条件は、アンドロイドデバイスのsqliteデータベースからgodaddyプラットフォームのmysqlサーバーに、ボタンをクリックすることでデータをアップロードしてからダウンロードする機能を開発することです。

  • 私は2つの別々のWebサービス開発:私はアンドロイドのための機能をアップロードし、ダウンロードするsynchelperクラスを開発し、私は
  • ボレーの要求APIを使用GoDaddyのサーバー
  • 上でホストされてダウンロード機能のためのアップロード機能のための1と1を。

PROBLEM - これらは別々のボタン、次々によってクリックで呼び出されたときに、アップロードとダウンロードの機能が正常に動作します。しかし、アップロードとダウンロードの機能を1つのボタンに統合すると、アップロード機能はうまく動作しますが、ダウンロード機能はアップロードされたばかりのデータを含むmysqlデータベースの最新のイメージをダウンロードしません。

誰もがこれにいくつかの光を当てることができますか?ここで

は私のコードです:syncHelper.java

MainActivityで

String read_animal_url = "http://www.careagriculture.com/get_all_animals3.php"; 
    String insert_animals_url = "http://www.careagriculture.com/insert_animals25.php"; 
    public void DeviceDataUpload() { 

    StringRequest postRequest = new StringRequest(Method.POST, insert_animals_url, new Response.Listener<String>() { 

       @Override 
       public void onResponse(String response) { 
        try { 
         if (!(response == null)) { 

          JSONObject c = new JSONObject(response); 
          System.out.print(insert_animals_url + " response " + response.toString()); 
          int success = c.getInt("success"); 
          if (success == 1) { 
           localDBHelper.deleteAllAnimalFromDevice(); 

          } 
         } 
        }catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
     } 
    }){ 
     @Override 
     public Map<String, String> getParams(){ 
      Map<String, String> params = localDBHelper.getAllAnimalMap(); 
      return params; 
     } 

     @Override 
     public Priority getPriority() { 
      return Priority.HIGH; 
     } 
    }; 
    AppController.getInstance().addToReqQueue(postRequest); 
} 


    public void ServerDataDownload(){ 

    JsonObjectRequest readAnimalReq = new JsonObjectRequest(Method.GET, read_animal_url, new Response.Listener<JSONObject>() { 

       @Override 
       public void onResponse(JSONObject response) { 
        try { 
         System.out.print(read_animal_url+" response "+response.toString()); 
         int success = response.getInt("success"); 

         if (success == 1) { 
          JSONArray ja = response.getJSONArray("animal"); 

          localDBHelper.deleteAllAnimalFromServer(); 

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

           map.put("ANIMAL_ID", c.getString(TAG_ANIMAL_ID)); 
           map.put("SUPERVISOR", c.getString(TAG_SUPERVISOR)); 
           map.put("ANIMAL_TYPE", c.getString(TAG_ANIMAL_TYPE)); 
           map.put("RECORD_TYPE", "S"); 
           if (!c.isNull(TAG_GENDER)) 
            map.put("GENDER", c.getString(TAG_GENDER)); 
           if (!c.isNull(TAG_DATE_OF_BIRTH)) 
            map.put("DATE_OF_BIRTH", c.getString(TAG_DATE_OF_BIRTH)); 
           if (!c.isNull(TAG_DATE_PURCHASED)) 
            map.put("DATE_PURCHASED", c.getString(TAG_DATE_PURCHASED)); 
           if (!c.isNull(TAG_PURCHASE_PRICE)) 
            map.put("PURCHASE_PRICE", c.getString(TAG_PURCHASE_PRICE)); 
           if (!c.isNull(TAG_DATE_DISTRIBUTED)) 
            map.put("DATE_DISTRIBUTED", c.getString(TAG_DATE_DISTRIBUTED)); 
           if (!c.isNull(TAG_DATE_SOLD)) 
            map.put("DATE_SOLD", c.getString(TAG_DATE_SOLD)); 
           if (!c.isNull(TAG_SALE_PRICE)) 
            map.put("SALE_PRICE", c.getString(TAG_SALE_PRICE)); 

           Item_List.add(map); 
           localDBHelper.insertAnimalFromServer(map); 

          } 
         } 

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

       } 
      }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
     } 
    }){ 
     @Override 
     public Priority getPriority() { 
      return Priority.LOW; 
     } 
    }; 
    AppController.getInstance().addToReqQueue(readAnimalReq); 
} 

、私が呼ん:

syncButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (localDBHelper.getAllAnimalCount()>0) { 
       SyncHelper syncHelper = new SyncHelper(MainActivity.this); 
       syncHelper.DeviceDataUpload(); 
       Toast.makeText(getApplicationContext(),"Upload Completed", Toast.LENGTH_LONG).show(); 
      } 
      syncHelper.ServerDataDownload(); 
      Toast.makeText(getApplicationContext(),"Sync Completed", Toast.LENGTH_LONG).show(); 
     } 
    }); 

答えて

1

new Response.Listener<JSONObject>()それは非同期なので、戻ってすぐに戻りますように音をアップロードするときクリックハンドライベントに追加します。

アップロードが完了した後にの後にトリガーしたい場合は、アップロードのリスナーのonResponse()メソッドから呼び出す必要があります。

+1

ありがとう、ありがとう、ありがとう!それは信じられないほど効果的です。あまりにも行動を説明してくれてありがとう! – vyxf

関連する問題