簡體   English   中英

廣播請求中的Volley請求不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM