2016-04-29 4 views
0

私はリアルタイムでデータベースのレコードをチェックしようとしています。 このため、私は2分ごとに1秒ごとにチェックするつもりです。 私は相談をしようとしてきました。Android - 2分で1秒ごとのSQLクエリ

質問はボレーで行いますが、これはおそらく最も便利です。問題は、クエリのシーケンスがうまくいかないようだということです。ここで

私のコード:

public void SQLQuery(final String hash) { 
    Handler h = new Handler(); 
    h.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      int time = 1; 
      while (time <= 120) { 
       if (!isAccepted) { 
        try { 
         makeRequestAgain(hash); 
         time++; 
         Log.d(TAG, String.valueOf(time)); 
         pDialog.setMessage("Segundos restantes: " + time); 
         Thread.sleep(1000); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } else { 
        hidePDialog(); 
        Toast.makeText(getActivity(), "Autorización denegada o tiempo de espera agotado.", Toast.LENGTH_LONG).show(); 
        break; 
       } 
      } 
     } 
    }, 120000); 
} 

public void makeRequestAgain(final String hash) { 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, PrepareData.CHECK_REQUEST, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(final String response) { 
        if (response.equalsIgnoreCase(PrepareData.USER_ACCEPT)) { 
         // 
         //El user acepto -> OK -> Intent MAP 
         isAccepted = true; 
         Toast.makeText(getActivity(), "Autorización OK", Toast.LENGTH_LONG).show(); 
        } else { 
         Toast.makeText(getActivity(), "Todavia no acepta...", Toast.LENGTH_LONG).show(); 
        } 
       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Toast.makeText(getActivity(), "Se perdió la conexión con el servidor.", Toast.LENGTH_LONG).show(); 
     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> params = new HashMap<>(); 
      params.put(PrepareData.ID_CONSULTA, hash); 
      return params; 
     } 
    }; 
    RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
    requestQueue.add(stringRequest); 
} 

enter image description here

が直接、私はメッセージログを取得しないと、進行状況ダイアログが更新されません。

私は何が失敗するでしょうか?

アドバイスありがとうございます。

編集:

権限は、私は他の.javaで、この同じ "makeRequestAgainを()" を使用し、問題なく動作し

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

のmanifest.xmlでOKです、すべての要求が優れています、しかし、この特定の要求は、動作しません。

+1

なAndroidManifestの権限として、より多くの情報を追加してください、要求のHTTP応答が行われ、これを実行しているAndroidのバージョンは – Bonatti

+0

を追加しました( 'M'のように見えます)。私はAndroid 6.0.0(API 23)で作業しています。 – Ferrrmolina

答えて

1

Threadとお考えください。 HandlerまたはAsyncTaskは内部でThreadを使用します。だからThreadに行ってください。

Thread t = new Thread(new Runnable(){ ... }); 
t.start(); 

再度実行するスレッドの新しいインスタントを作成したいのであれば、ループであってもよく、

new Thread(t).start(); 

スレッドが一度デーモンになるので、再起動することはできません。

UI要素を更新する場合は、実行可能ファイル内でrunOnUiThread(new Runnable(){...});とする必要があります。順番にThreadの中のRunnableの中で呼び出します。

+0

さて、お試しください。ありがとう – Ferrrmolina

+0

@Ferrrmolinaあなたが問題を抱えている場合は、ご了承ください – Sibidharan

+0

仕事、部分的に、あなたの推薦作品:)。ありがとう – Ferrrmolina

2

リクエストを追加する前にrequestQueue.start()に電話する必要があります。

また、単一のRequestQueueインスタンスを使用し、新しいリクエストを開始する前にリクエストの完了を待つことをお勧めします。

また、これはSQLと何が関係しているのかよくわかりません。 VolleyはHTTPライブラリです。

+0

私はrequestQueue.start()を追加しようとしましたが、作業はしませんでした。新しいリクエストを開始する前にリクエストを待つことができますか?もう少し詳しく説明してください。私はボレーで、私は、POSTリクエストを送信し、応答はあなたが 'StringRequest'コールバック内からの次の要求を行うことができる – Ferrrmolina

+0

Stringに==している場合、私は確認し、PHPファイルにクエリを作ります。 – Nathanael

関連する問題