2017-04-03 79 views
6

Próbuję użyć interfejsu API Reddit, aby zapisać wpis. Wiem, że nieprawidłowo formatuję żądanie, ale nie mogę znaleźć żadnej dokumentacji, jak to zrobić poprawnie. Jeśli ktokolwiek może albo poprowadzić mnie we właściwym kierunku, albo pomóc mi sformatować żądanie poprawnie. To jest to, co do tej pory miałem.Jak przygotować post Reddita za pomocą okhttp

public void save(View v) 
{ 
    OkHttpClient client = new OkHttpClient(); 
    String authString = MainActivity.CLIENT_ID + ":"; 
    String encodedAuthString = Base64.encodeToString(authString.getBytes(), 
      Base64.NO_WRAP); 
    System.out.println("myaccesstoken is: "+ myaccesstoken); 
    System.out.println("the image id is: "+ myimageid); 
    Request request = new Request.Builder() 
      .addHeader("User-Agent", "Sample App") 
      .addHeader("Authorization", "Bearer " + myaccesstoken) 
      .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") 
      .url("https://oauth.reddit.com/api/save.json?") 
      .post(RequestBody.create(MediaType.parse("application/x-www-form-urlencoded"), 
        ""+ myimageid + 
          "1")) 
      .build(); 

    client.newCall(request); 

} 

Jestem bardzo bardzo nowy w użyciu interfejsów API i nie jestem pewien, czego dokładnie szukam. Oto link do API reddit do zapisywania

https://www.reddit.com/dev/api/oauth#POST_api_save

Z góry dziękuję za wszelką pomoc !!!

+0

Czy możesz podać kod logcat? – sschrass

+0

Czy próbujesz zapisać cały wpis lub tylko link lub komentarz? – BlackHatSamurai

Odpowiedz

4

Zgodnie z dokumentacją, to wygląda na to formatowanie POST ciało nieprawidłowo. Trzeba uczynić swoje ciało wyglądać następująco:

{ 
"category" : "your category" //This could something like "science" 
"id" : "fullname of thing" 
} 

wygląda również jak brakuje nagłówka X-Modhash.

Fullname docs

modhash docs

Należy również dołączyć X-Modhash nagłówek. Dokumentacja wyjaśnia to tutaj.

2

Czy próbowałeś spojrzeć na wiki okhttp?

https://github.com/square/okhttp/wiki/Recipes

Wygląda na to, że jesteś na dobrej drodze, ale prawdopodobnie trzeba zadzwonić wykonać, aby uzyskać odpowiedź.

Response response = client.newCall(request).execute();

Upewnij się także, aby nie robić tego na głównym wątku.

Ja osobiście lubię używać modernizacji zamiast bezpośrednio używać okhttp.

https://square.github.io/retrofit/