I'm using MVVM Design Pattern to build this app, but when I load data user using the searching method I get issue like this:
2020-05-04 11:34:55.839 11187-11187/com.planetmars23.im.movie_catalogue D/imam_log: null
2020-05-04 11:34:55.839 11187-11187/com.planetmars23.im.movie_catalogue I/imam_log: setSearchUserGithub - Response success
public void setSearchUserGithub(String accessToken, String user) {
Call<UserDataObject> githubSearchObjectCall = service.userSearchResult(user);
githubSearchObjectCall.enqueue(new Callback<UserDataObject>() {
#Override
public void onResponse(Call<UserDataObject> call, Response<UserDataObject> response) {
assert response.body() != null;
listGithub.setValue(response.body().getResults());
Log.d(Base.LOG, String.valueOf(response.body().getResults()));
Log.i(Base.LOG, "setSearchUserGithub - Response success");
}
#Override
public void onFailure(Call<UserDataObject> call, Throwable t) {
Log.w(Base.LOG, "setSearchUserGithub - Response failed :" + t.getMessage());
}
});
}
I'm using this for GitHub service
#GET("/search/users?")
#Headers("Authorization:"+ Base.KEY)
Call<UserDataObject> userSearchResult(#Query("q") String username);
Related
I have a problem in my android studio project. when i try to do some retrieve API using retrofit from my web services, i had some errors that said
"Cannot find local variable call"
here is my code :
private void RegisUserTampung(String token)
{
Call<ResponseRegister> call = client.regisAccount("bearer " +token, "N", new Gson().toJson(regisUser));
call.enqueue(new Callback<ResponseRegister>() {
#Override
public void onResponse(Call<ResponseRegister> call, Response<ResponseRegister> response) {
ResponseRegister responseRegister = response.body();
if (responseRegister != null) {
Toast.makeText(VerifActivity.this, responseRegister.getMessage(), Toast.LENGTH_SHORT).show();
}
}
#Override
public void onFailure(Call<ResponseRegister> call, Throwable t) {
Toast.makeText(VerifActivity.this, "Failed POST Token to server ", Toast.LENGTH_SHORT).show();
}
});
and this is error i had when i went into debug mode :
Cannot find local variable 'call'
any idea for this issue?
You Now Have 2 variable With Same Name
Call<ResponseRegister> **call** = client.regisAccount("bearer " +token, "N", new Gson().toJson(regisUser));
And
public void onResponse(Call<ResponseRegister> **call**, Response<ResponseRegister>
try to change Variable Name
get request endpoint method defined in api interface
#GET("youtube/v3/search")
Callback<YoutubeResponse> getYouTubeVideos(#Query("key") String apiKey,
#Query("channelId") String channelId,
#Query("part") String videoPart,
#Query("order") String videoOrder,
#Query("maxResults") int maxResults,
Callback<ChannelListResponse> callback);
Method call to get the results :
Callback <YoutubeResponse> call = apiService.getYouTubeVideos(API_KEY,
"UCjXfkj5iapKHJrhYfAF9ZGg", "snippet", "date", 20, new Callback<ChannelListResponse>() {
#Override
public void onResponse(Call<ChannelListResponse> call, Response<ChannelListResponse> response) {
Log.v("check", response.body().getEtag() + "check");
}
#Override
public void onFailure(Call<ChannelListResponse> call, Throwable t) {
}
}) ;
I am not getting results via this implementaion giving illegal stat exception .
There is some structual mistake because the log says Unable to create call adapter for retrofit2.Callbackfor method ApiInterface.getYouTubeVideos
using these additional links to implement the same . Using this reference link for help : YouTube Data API v3 search JSON response retrofit parsing error
But If keep the return type of getYouTubeVideos() as void. Then it says service method can not have void return type .
A help in this regards will be appreciated
Please correct the retofit syntax like this.
api interface,
#GET("youtube/v3/search")
Call<ChannelListResponse> getYouTubeVideos(#Query("key") String apiKey,
#Query("channelId") String channelId,
#Query("part") String videoPart,
#Query("order") String videoOrder,
#Query("maxResults") int maxResults);
Method call,
Call<ChannelListResponse> call = apiService.getYouTubeVideos(API_KEY,
"UCjXfkj5iapKHJrhYfAF9ZGg", "snippet", "date", 20);
call.enqueue(new Callback<ChannelListResponse>() {
#Override
public void onResponse(Call<ChannelListResponse>call,
Response<ChannelListResponse> response) {
Log.d(TAG, "onResponse");
}
#Override
public void onFailure(Call<ChannelListResponse>call, Throwable t) {
// Log error here since request failed
Log.e(TAG, t.toString());
}
});
I'm trying to get a json list from a web service.
This is the json string return by server :
[{"categoryName":"Política"},{"categoryName":"Economía"},{"categoryName":"Cultura"},{"categoryName":"Deportes"}
The problem is converting in to the POJO. The special characters (í) it's appear like "Pol�tica".
This is the retrofit call function :
#GET("categories")
public Call<List<CategoryPojo>> getCategorias(#Query("sitename") String site)
this is the callback function:
Call<List<CategoryPojo>> call = restservice.getApiService().getCategorias(medio);
try {
call.enqueue(new Callback<List<CategoryPojo>>() {
#Override
public void onResponse(Call<List<CategoryPojo>> call, Response<List<CategoryPojo>> response) {
List<CategoryPojo> categories = response.body();
if (listener != null)
listener.onDataLoaded(categories);
}
#Override
public void onFailure(Call<List<CategoryPojo>> call, Throwable throwable) {
Log.e("Retrofit Error", throwable.getMessage());
}
});
this is the POJO:
public class CategoryPojo implements Serializable{
public CategoryPojo() { }
#SerializedName("categoryName")
private String name;
public String getName()
{
return this.name;
}
}
The result of the request to the Web services, (output in browser) is :
[{"categoryName":"Política"},{"categoryName":"Economía"},{"categoryName":"Cultura"},{"categoryName":"Deportes"},{"categoryName":"Salud"},{"categoryName":"Ciencia y Tecnología"},{"categoryName":"Medio Ambiente"},{"categoryName":"Medios"},{"categoryName":"Militar e Inteligencia"},{"categoryName":"Sociedad"}]
So, the return json has a good encoding...i think that maybe is about the way retrofit read the response.
I'm using retrofit-2.0.2, gson-2.6.1, converter-gson-2.0.2, okhttp-3.2.0.
Any help? please
You should check Content-type in the response headers. Look for the charset value and try to change that on the backend side to application/josn;charset=UTF-8. That worked for me.
We're moving from Apache's http client to Retrofit and we've found some edge cases where param values can be null.
Apache used to intercept these and turn them into empty strings, but Retrofit throws an IllegalArgumentException.
We want to replicate the old behavior so that it doesn't cause any unexpected issues out in production. Is there a way for me to swap these null values with empty strings before ParameterHandler throws an exception?
You can try the following:
My web service (Asp.Net WebAPI):
[Route("api/values/getoptional")]
public IHttpActionResult GetOptional(string id = null)
{
var response = new
{
Code = 200,
Message = id != null ? id : "Response Message"
};
return Ok(response);
}
Android client:
public interface WebAPIService {
...
#GET("/api/values/getoptional")
Call<JsonObject> getOptional(#Query("id") String id);
}
MainActivity.java:
...
Call<JsonObject> jsonObjectCall1 = service.getOptional("240780"); // or service.getOptional(null);
jsonObjectCall1.enqueue(new Callback<JsonObject>() {
#Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
Log.i(LOG_TAG, response.body().toString());
}
#Override
public void onFailure(Call<JsonObject> call, Throwable t) {
Log.e(LOG_TAG, t.toString());
}
});
...
Logcat output:
If using service.getOptional(null);
04-15 13:56:56.173 13484-13484/com.example.asyncretrofit I/AsyncRetrofit: {"Code":200,"Message":"Response Message"}
If using service.getOptional("240780");
04-15 13:57:56.378 13484-13484/com.example.asyncretrofit I/AsyncRetrofit: {"Code":200,"Message":"240780"}
I'm using the latest Android SDK for VK, and trying to get posts from my wall:
VKParameters vkParameters = VKParameters.from(VKApiConst.USER_ID, SettingsManager.getInstance().getVkId());
VKRequest vkRequest = VKApi.wall().get(vkParameters);
vkRequest.executeWithListener(new VKRequest.VKRequestListener() {
#Override
public void onComplete(VKResponse response) {
super.onComplete(response);
VKList<VKApiPost> posts = (VKList<VKApiPost>) response.parsedModel;
for (VKApiPost post : posts) {
Logger.i(GuestsActivity.class, "Post: " + post.getId());
}
}
#Override
public void onError(VKError error) {
super.onError(error);
}
});
I see the JSON and string in response, but parsedModel is null:
Why and how to fix it?
You need add request param extended (and yes, i know its strangely ):
VKApiConst.EXTENDED, 1