Использование интерфейса для обработки AsyncTask Activity отображается как ошибка в Android Studio, но не во время выполнения - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь использовать решение, показанное здесь, Как получить результат OnPostExecute () для основной деятельности, потому что AsyncTask - это отдельный класс? , и заметил, что пока код компилируется и работает нормальноAndroid Studio указывает на ошибку и подчеркивает ее. Новичок в Android, поэтому я бы приветствовал указатель в правильном направлении.

В частности, у меня написан этот код:

public class HttpRequest extends AsyncTask <HttpRequestParam, Void, String> {
    public AsyncResponse delegate = null;


    public HttpRequest(AsyncResponse delegate){
        this.delegate = delegate;
    }

    @Override
    protected String doInBackground(HttpRequestParam... hr) { // }
...
}

Все это компилируется и прекрасно работает, но Android-студия жалуется:

"Невозможно получить доступ к com.foo.bar.HttpRequestParam"

Те же поверхности жалоб в подпрограмме в MainActivity.java, где я вызываю запрос HttpRequest:

        new HttpRequest(new AsyncResponse() {
            @Override
            public void processFinish(String output) {
                Log.v(TAG, "registerUser async callback completed");
                linearThemepackProgress.setVisibility(View.GONE);
            }
        }).execute(hr);

HttpRequestParam - это простой класс, который я использую для маршалинга определенных атрибутов, которые мне нужно установить для соединения, и является частью пакета (следовательно, он компилируется, несмотря на три ошибки).

Указатели приветствуются.

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

ОБНОВЛЕНИЕ: тот же самый индикатор ошибки появляется во всей полноте вызовов из моей MainActivity, где все строки ниже помечены подчеркивающим индикатором ошибки!

        HttpRequestParam hr = new HttpRequestParam(mContext, this.userRegistrationString(), null, "POST");
        linearThemepackProgress.setVisibility(View.VISIBLE);
        Log.v(TAG, "ClientUserRequest: " + hr);
        new HttpRequest(new AsyncResponse() {
            @Override
            public void processFinish(String output) {
                Log.v(TAG, "registerUser async callback completed");
                linearThemepackProgress.setVisibility(View.GONE);
            }
        }).execute(hr);

Класс HttpParamRequest, показанный ниже:

public class HttpRequestParam {
  private String mUrl;        // The URL to be connected to
  private File mFile;         // The directory for the temporary file
  private String mHttpType;   // Whether the HTTP connection is for posting or download
  private Context mContext;   // User context
  HttpRequestParam(Context c, String s, File f, String ht) {
    mUrl = s;
    mFile = f;
    mHttpType = ht;
    mContext = c;
  }
  File getFile() {
    return mFile;
  }
  String getUrl() {
    return mUrl;
  }
  String getType() {
    return mHttpType;
  }
  Context getContext() {
    return mContext;
  }
}

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

После нескольких часов игры без четкой подсказки я попытался:

  1. удалить файл класса HttpParam
  2. очистить проект
  3. восстановить файл, работающийчерез интерфейс Android Studio для объявления классов
  4. перезапустить анализ кода

Кажется, проблема решилась сама собой.

0 голосов
/ 10 октября 2019

Добрый день. Почему бы вам не использовать модифицированную библиотеку вместо написания этой асинхронной задачи? Я предпочитаю, чтобы вы использовали библиотеку модернизации, она будет обрабатывать все запросы Http для вас простым и безопасным способом.

Пожалуйста, посмотрите на это Модификация

Дооснащение с помощью SOAP

...