[英]Volley request inside BroadcastReceiver not working
好的,我有下面的類,應該在打開設備后執行。 因此,為了嘗試它,我在仿真設備上進行了冷啟動。 原來請求似乎從未被調用過。 那怎么可能?
public class AlarmNotificationReceiver extends BroadcastReceiver{
private RequestQueue mQueue;
@Override
public void onReceive(Context context, Intent intent) {
mQueue = Volley.newRequestQueue(context);
while(true){
if(Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())){
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, API.getDeviceTypes(), null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Log.d("mytag","TEST"); //THIS IS NEVER BEING PRINTED!
processResponse(response);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("mytag", "Error de response");
error.printStackTrace();
}
});
mQueue.add(request);
Log.d("mytag","OK IM HERE EVERYONE"); // THIS WORKS
}
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
我使用if(true)在廣播接收器上測試和調試您的代碼(以防萬一我可以看到發生了什么?),並且我看到了無需while語句就可以正常工作。 而且我認為您的問題出在您的代碼上,而不是在廣播接收器中使用凌空。 不要忘了添加以下行來體現:
<receiver android:name="com.app.test.AlarmNotificationReceiver">
<intent-filter>
<action android:name="com.example.alarm.notifier" />//this should be unique string as action
</intent-filter>
</receiver>
和權限:uses-permission android:name =“ android.permission.INTERNET”
運行此代碼,然后查看Logcat,一切正常!(您可以在10秒后在LogCat上看到響應,而在1分鍾后可以在代碼上看到響應)
public class AlarmNotificationReceiver extends BroadcastReceiver {
private RequestQueue mQueue;
@Override
public void onReceive(final Context context, Intent intent) {
Log.d("onrecieve", "on recieveeeeeeeeee");
mQueue = Volley.newRequestQueue(context);
if (true) {
String url = " http://www.mocky.io/v2/5b2734202e000010009e42c3";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Log.d("mytag", response.toString()); //THIS IS NEVER BEING PRINTED!
String name = response.getString("name");
Toast.makeText(context, name + "", Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("mytag", "Error de response");
error.printStackTrace();
}
});
mQueue.add(request);
Log.d("mytag", "OK IM HERE EVERYONE"); // THIS WORKS
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.