我将令牌的值保存在类变量_Token
中。令牌将添加到CreateHttpPostRequest
中的请求标头
我使用CreateHttpPostRequest
在PostToJira
中进行HTTP请求调用,并将响应绑定到OnResponseReceived
。
一旦我得到响应,我调用AddScreenshot
,在那里我再次使用CreateHttpPostRequest
发出请求,并将屏幕截图添加到问题中。(您只能将屏幕截图添加到现有问题,这就是为什么我们必须首先创建它,然后在后续调用中添加屏幕截图。
问题是当调用AddScreenshot
时,_Token
的值为空,我不知道为什么。
调试时,监视值显示如下:c++ Stopped in a C++ method, but 'this' isn't available; pretending we are in a generic context. error: use of undeclared identifier '_Token'
我尝试使用BindLambda代替,认为可能是Raw导致了这个问题,但看起来好像是绑定函数的一些东西清空了那个成员变量。即使我在头文件中定义了_Token
的值,而不是使用AuthMan::GetToken(_Token)
。值仍为空。
我也试过this->_Token
,结果也是一样。
下面是我的头文件和cpp文件,经过清理,只显示问题和上下文:
HtttpUtil.h
class HttpUtil
{
public:
bool PostToJira();
private:
void AddScreenshot() const;
void OnResponseReceived(FHttpRequestPtr request, FHttpResponsePtr response, bool bConnectedSuccessfully) const;
TSharedRef<IHttpRequest, ESPMode::ThreadSafe> CreateHttpPostRequest() const;
FString _Token = "my_token";
};
HttpUtil.cpp
bool HttpUtil::PostToJira()
{
const FHttpRequestRef request = CreateHttpPostRequest();
request->OnProcessRequestComplete().BindRaw(this, &HttpUtil::OnResponseReceived);
request->ProcessRequest();
return true;
}
void HttpUtil::AddScreenshot() const
{
const FHttpRequestRef request = CreateHttpPostRequest();
request->ProcessRequest();
}
void HttpUtil::OnResponseReceived(FHttpRequestPtr request, FHttpResponsePtr response, bool bConnectedSuccessfully) const
{
AddScreenshot();
}
TSharedRef<IHttpRequest, ESPMode::ThreadSafe> HttpUtil::CreateHttpPostRequest() const
{
TSharedRef<IHttpRequest, ESPMode::ThreadSafe> request = FHttpModule::Get().CreateRequest();
request->SetURL("http://echo.jsontest.com/key/value/one/two");
// When this function is called by AddScreenshot(), the _Token value is empty
UE_LOG(LogConsoleResponse, Warning, TEXT("_Token = %s"), *_Token);
return request;
}
1条答案
按热度按时间v09wglhw1#
我遇到的问题是在回调发生之前类就被析构了。我的解决方案是不使用成员变量。