Por que o HttpClient sempre me dá a mesma resposta?
Meio Ambiente:
Atualização 4 do VS2012
Windows Phone 8 SDK
um novo projeto do Windows Phone baseado no WP OS 7.1
NuGet pack1: MS Async
NuGet pack2: MS HttpClient
O que o projeto faz
um único teste para uma API do fórum:
para postar um novo encadeamento no fórum e atualizar o JSON para verificar se a "contagem" está acumulada.
O que significa a interface do usuário
1º bloco de texto:
a resposta json será exibida aqui
3 botões:
[atualizar JSON]: use API1 para atualizar a lista de threads
[New Post]: use API2 para postar um novo tópico no fórum, o título e o texto serão exibidos abaixo
[IE]: json aberto no IE usa API1
Informações sobre o tópico:
o tópico que você acabou de postar usa o botão [Novo Post]
O que o JSON significa
só precisa focar 2 partes
count: 244 ---> número total de threads no fórum
"57923" ---> o título do 1º thread (o campo "data" é uma matriz da lista de threads)
Qual é o procedimento de teste
1. abra o aplicativo
2. clique em [atualizar JSON] para obter a lista
3. lembre-se da parte "count" e do "title" do 1º thread
4. clique em [New Post] para postar um novo tópico, o título do tópico será exibido abaixo
5. clique em [atualizar JSON] para ver a lista de threads mais recentes
6. esperado: a "contagem" acumula em 1 e a parte "title" deve ser a mesma que abaixo
Problema:
1. depois de clicar em [Nova postagem], não importa quantas vezes você pressione [atualizar JSON], a contagem não será acumulada!
2. mas abra o URL no Chrome (Desktop), você verá que o JSON já foi atualizado!
3. feche o aplicativo e abra-o novamente, pressione [refresh JSON], o JSON será atualizado conforme o esperado, mas quando você publica um novo thread, o problema ocorre novamente
Por que e como resolvê-lo?
O código
private async void RefreshJSONButton_Click(object sender, RoutedEventArgs e)
{
this.JsonView.Text = string.Empty;
HttpClient client = new HttpClient();
string url =
"API1 Address Here";
string x = await client.GetStringAsync(url);
this.JsonView.Text = x;
client.Dispose();
}
private async void NewPostButton_Click_1(object sender, RoutedEventArgs e)
{
Random rnd = new Random();
this.num = rnd.Next(1, 99999);
// generate the title and content with random number
string threadTitle = this.num.ToString();
string threadContent = "111" + num.ToString();
// generate the url
string url =
"API2 Address Here";
url = url + "&title=" + threadTitle + "&content=" + threadContent;
// use HttpClient to send the new thread
HttpClient client = new HttpClient();
string x = await client.GetStringAsync(url);
client.Dispose();
// display the thread informartion for further check
this.titleView.Text = threadTitle;
this.contentView.Text = threadContent;
}