Не так много кода отправлено, так что в основном будет угадывать.
Как вы уверены, что mainActivityWeakReference не является нулевым, так как это слабая ссылка?Проверьте эту ссылку о том, как использовать слабые справочные действия ссылка .Что-то вроде:
@Override
protected void onPostExecute(String shortURL) {
MainActivity mainActivity = mainActivityWeakReference.get();
if (mainActivity != null) {
mainActivity.shortURLreturn(shortURL);
}
}
Кроме того, для такого рода действий вам на самом деле не нужна слабая ссылка на действие (конечно, только если вам не нужны какие-либо методы, которые на самом деле принадлежатAndroid Activity класс).Если вам нужны только ваши публичные методы, которые вы реализовали в MainActivity, вы можете создать интерфейс, например:
interface ShortUrlReceiveCallback {
void onReceive(String shortURL);
}
, и тогда вы просто сохраните эту ссылку в конструкторе класса getShortURL (примечаниечто классы начинаются с заглавной буквы), а затем при вызове onPostExecute -> shortUrlReceiveCallback.onReceive (shortURL);и пусть ваша MainActivity реализует этот ShortActivityCallback.
Для моего 2-го момента, имейте в виду, что onPostExecute происходит в другом потоке (IO / фоновый поток), чем MainActivity (UiThread), если впоследствии вы делаете что-то, что должнобыть в главном потоке или поточно-безопасным (установка переменных должна быть поточно-ориентированной; попробуйте использовать блокировки, если вы, например, не:
class MainActivity {
private String mainShortUrl;
private Lock urlReturnLock = new ReentrantLock();
...
public void shortURLReturn(String shortUrl) {
urlReturnLock.lock();
try {
mainShortUrl = shortUrl;
} finally {
urlReturnLock.unlock();
}
}
}