onHandleIntent не вызывается - PullRequest
       16

onHandleIntent не вызывается

0 голосов
/ 25 августа 2018

В приложении, которое я разрабатываю, я пытаюсь использовать IntentService, как показано ниже в коде.IntentService объявляется, как показано ниже в файле манифеста.проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда я запускаю приложение, onHandleIntent никогда не вызывается.

Я проверил несколько примеров, но ни один из них не помог, потому что рекомендуемые советы по решению проблемы не работали.

Я запустил службу следующим образом:

this.mButtonFetchURL.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mServiceIntent = new Intent(getApplicationContext(), TwitterTrendsAPIService.class);
            mServiceIntent.putExtra(CONST_KEY_REQUEST_URL, BASE_REQUEST_URL);
            startService(mServiceIntent);
            clearEditText(mEditTextURLContents);
        }
    });

, пожалуйста, дайте мне знать, как ее решить.

код :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.pc_.twittertrendsnearlocation">

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

<application
    ....
    ....
    ....
    <service
        android:name=".services.TwitterTrendsAPIService"
        android:exported="false"
        android:enabled="true"/>
</application>

код

public class TwitterTrendsAPIService extends IntentService {

private static final String TAG = TwitterTrendsAPIService.class.getSimpleName();
private boolean mIsFetching = false;

private String mBaseRequestURL = null;
private RequestQueue mRequestQueue = null;
private JsonArrayRequest mJsonArrayRequest = null;

private final static String CONST_KEY_JSON_ARRAY_TRENDS = "trends";
private JSONObject mEntireJSONObject = null;
private JSONArray mEntireTrendsArray = null;

public TwitterTrendsAPIService() {
    super(null);
}

/**
 * Creates an IntentService.  Invoked by your subclass's constructor.
 *
 * @param name Used to name the worker thread, important only for debugging.
 */
public TwitterTrendsAPIService(String name) {
    super(name);
}

@Override
public void onCreate() {
    super.onCreate();
    Log.w(TAG, "[onCreate]");

    this.setupVolley();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.w(TAG, "[onStartCommand]");

    return Service.START_NOT_STICKY;
}

@Override
public void onHandleIntent(Intent intent) {
    Log.w(TAG, "[onHandleIntent]");
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.w(TAG, "[onDestroy]");
}

private void setupVolley() {
    this.mRequestQueue = Volley.newRequestQueue(this);
}

private class ServiceRunnable implements Runnable {

    @Override
    public void run() {
        fetchJSONData();
        stopSelf();
    }
}

private void fetchJSONData() {
    Log.w(TAG, "@fetchJSONData");

    this.mJsonArrayRequest = new JsonArrayRequest(Request.Method.GET, this.mBaseRequestURL, null, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            try {
                mEntireJSONObject = response.getJSONObject(0);
                mEntireTrendsArray = mEntireJSONObject.getJSONArray(TwitterTrendsAPIService.CONST_KEY_JSON_ARRAY_TRENDS);
                Log.i(TAG, "mEntireTrendsArray.length(): " + mEntireTrendsArray.length());
                Log.i(TAG, "mEntireTrendsArray.get(0): " + mEntireTrendsArray.get(0));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });
}
}

1 Ответ

0 голосов
/ 25 августа 2018

Удалить onStartCommand(), или цепочка к реализации суперкласса onStartCommand(). Прямо сейчас вы переопределяете встроенную реализацию, и IntentService использует это для настройки фонового потока и вызывает onHandleIntent().

...