2016-04-29 51 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

直接,我没有得到消息日志,不更新进度对话框。

我会失败吗?

感谢您的建议。

编辑:

权限是在manifest.xml

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

OK我使用同样的 “makeRequestAgain()” 在其他的.java和运行正常,所有的请求都不错,但是,这个特殊要求,不起作用。

+1

请添加更多信息,例如AndroidManifest中的权限,请求的HTTP响应以及您正在执行的Android版本(看起来像'M') – Bonatti

+0

已添加。我正在使用Android 6.0.0(API 23)。 – Ferrrmolina

回答

1

我认为你可以用Thread去。 HandlerAsyncTask内部使用Thread。所以请使用Thread

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

所以,如果你想创建线程的一个新的即时再次运行,可能是在一个循环中,

new Thread(t).start(); 

因为线程一旦成为一个守护进程无法再次启动。

在可运行内部,如果要更新UI元素,则必须使用runOnUiThread(new Runnable(){...});。在Runnable中调用它,该Runnable又在Thread之内。

+0

好的,我会试试。谢谢 – Ferrrmolina

+0

@Ferrrmolina当然,如果你有麻烦,我知道 – Sibidharan

+0

工作,部分,但你的建议似乎工作:)。谢谢 – Ferrrmolina

2

您需要在添加请求前先致电requestQueue.start()

此外,我建议使用单个RequestQueue实例,并在开始新实例之前等待请求完成。

此外,不确定这与SQL有什么关系。 Volley是一个HTTP库。

+0

好吧,我尝试添加requestQueue.start(),但没有工作。如何等待请求在开始新的请求之前完成?请问您能解释一下吗?我在一个PHP文件中进行查询,我抽出一个post请求,然后检查回应是否为== – Ferrrmolina

+0

您可以在'StringRequest'回调中发出下一个请求。 – Nathanael