Je voudrais poster des données à mon API si on clique sur un bouton flottant. J'utilise la rénovation. Voici comment j'accéder au bouton d'action flottant dans mon activité:Android post à API sur FloatingActionButton cliquez sur
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_inquiry);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ButterKnife.bind(this);
service = RetrofitBuilder.createService(ApiService.class);
tokenManager = TokenManager.getInstance(getSharedPreferences("prefs", MODE_PRIVATE));
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
Voici comment mon ApiService ressemble à:
public interface ApiService {
@POST("device")
@FormUrlEncoded
Call<PostResponse> device(@Field("device_name") String device_name,
@Field("device_producer") String device_producer,
@Field("device_pixel_width") int device_pixel_width,
@Field("device_pixel_height") int device_pixel_height,
@Field("device_ratio_width") int device_ratio_width,
@Field("device_ratio_height") int device_ratio_height,
@Field("device_android_version") char device_android_version,
@Field("device_status") int device_status);
@GET("posts")
Call<PostResponse> posts();
}
Et c'est la classe post qui contient des accesseurs:
public class Post {
int id;
String title;
String body;
String device_name;
String device_producer;
int device_pixel_width;
int device_pixel_height;
int device_ratio_width;
int device_ratio_height;
char device_android_version;
int device_status;
public String getDeviceName() { return device_name; }
public void setDeviceName(String device_name) { this.device_name = device_name; }
public String getDeviceProducer() { return device_producer; }
public void setDeviceProducer(String device_producer) { this.device_producer = device_producer; }
public int getDevicePixelWidth() { return device_pixel_width; }
public void setDevicePixelWidth(int device_pixel_width) { this.device_pixel_width = device_pixel_width; }
public int getDevicePixelHeight() { return device_pixel_height; }
public void setDevicePixelHeight(int device_pixel_height) { this.device_pixel_height = device_pixel_height; }
public int getDeviceRatioWidth() { return device_ratio_width; }
public void setDeviceRatioWidth(int device_ratio_width) { this.device_ratio_width = device_ratio_width; }
public int getDeviceRatioHeight() { return device_ratio_height; }
public void setDeviceRatioHeight(int device_ratio_height) { this.device_ratio_height = device_ratio_height; }
public int getDeviceAndroidVersion() { return device_android_version; }
public void setDeviceAndroidVersion(char device_android_version) { this.device_android_version = device_android_version; }
public int getDeviceStatus() { return device_status; }
public void setDeviceStatus(int device_status) { this.device_status = device_status; }
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
PostResponse:
public class PostResponse {
List<Post> data;
public List<Post> getData() {
return data;
}
}
EDIT
J'ai essayé suivante:
service = RetrofitBuilder.createService(ApiService.class);
public void onClick(View view) {
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int device_pixel_width = size.x;
int device_pixel_height = size.y;
call = service.device(android.os.Build.MODEL, android.os.Build.MANUFACTURER, device_pixel_width, device_pixel_height, metrics.heightPixels, metrics.widthPixels, android.os.Build.VERSION.SDK_INT, 1);
System.out.println("PUPS: " + call);
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
mais je reçois ce message dans la console:
Modifier :
Maintenant, ça ressemble à ceci, mais qu'est-ce que j'ai à faire exactement dans la fonction onResponse pour enregistrer les données dans ma base de données api?
Actuellement, il est inclus dans la méthode onFailure.
call = service.device(android.os.Build.MODEL,
android.os.Build.MANUFACTURER,
device_pixel_width, device_pixel_height,
metrics.heightPixels, metrics.widthPixels,
android.os.Build.VERSION.SDK_INT, 1);
call.enqueue(new Callback<PostResponse>() {
@Override
public void onResponse(Call<PostResponse> call, Response<PostResponse> response) {
Log.w(TAG, "onResponse: " + response);
if(response.isSuccessful()){
} else {
}
}
@Override
public void onFailure(Call<PostResponse> call, Throwable t) {
}
}
Alors, quelle est la question? Quel est le problème? – Piyush
@Piyush Je ne sais pas comment publier des données après avoir cliqué sur le bouton, juste des données aléatoires est bien à titre d'exemple – utdev