2016-04-29 5 views
0

Я пытаюсь проверить запись базы данных в реальном времени. Для этого я намерен проверять каждую секунду каждые 2 минуты. Я пытался провести консультации.Android - SQL-запрос каждые 1 секунду в течение 2 минут

Запрос делается с волейболом, который, возможно, является самым удобным. Проблема в том, что, похоже, не работает последовательность запросов.

Вот мой код:

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

Непосредственно, я не получаю журнал сообщений и диалог прогресса не обновляется.

Что я буду терпеть неудачу?

Спасибо за консультацию.

Edit:

Разрешения OK в Manifest.xml

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

Я использую этот же "makeRequestAgain()" в других .java и работать нормально, все запрос хороши, но, этот особый запрос, не работает.

+1

Пожалуйста, добавьте дополнительную информацию, такую ​​как Разрешения в AndroidManifest, HTTP-ответ выполненных запросов и версию Android, которую вы выполняете (выглядит как 'M'). – Bonatti

+0

Добавлено. Я работаю в 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(); 

потому что нить однажды стать демон не может быть запущена снова.

Внутри runnable, если вы хотите обновить элемент пользовательского интерфейса, вы должны сделать это с помощью runOnUiThread(new Runnable(){...});. Назовите его внутри Runnable, который, в свою очередь, находится внутри Thread.

+0

Хорошо, я попробую. спасибо – Ferrrmolina

+0

@Ferrrmolina уверен, что если у вас есть проблемы, lemme know – Sibidharan

+0

Работайте, частично, но ваша рекомендация кажется рабочей :).Спасибо – Ferrrmolina

2

Прежде чем добавлять запросы, необходимо позвонить requestQueue.start().

Кроме того, я рекомендую использовать один экземпляр RequestQueue и ждать завершения запроса перед запуском нового.

Кроме того, не уверен, что это связано с SQL. Volley - это HTTP-библиотека.

+0

Хорошо, я попробовал добавить requestQueue.start(), но не работал. Как можно дождаться завершения запроса, прежде чем начинать новый?, Можете ли вы объяснить немного больше, пожалуйста ?. Я делаю запрос в php-файле, с volley, я отправляю почтовый запрос и проверяю, является ли ответ == строкой – Ferrrmolina

+0

. Вы можете сделать следующий запрос из обратного вызова 'StringRequest'. – Nathanael

Смежные вопросы