2017-07-24 78 views
-1

如果点击一个浮动按钮,我想发布一些数据到我的api。 我正在使用改造。这是我访问我的活动浮动操作按钮:FloatingActionButton上的Android后post to api点击

@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(); 
     } 
    }); 
} 

这是我ApiService看起来像:

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(); 
} 

这是包含getter和setter Post类:

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; 
    } 
} 

编辑

我尝试以下操作:

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(); 
    } 

但是我在控制台得到这个消息:

[email protected]8

编辑:

现在看起来像这样,但我必须在onResponse函数中做些什么才能将数据保存在我的api数据库中?

当前进入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) { 

      } 
     } 
+0

那么问题是什么?问题是什么? – Piyush

+0

@Piyush我不知道如何发布一些数据后,点击按钮,只是随机数据是好例如 – utdev

回答

1

在点击您的POJO类岗位上做出了一个对象,使用的字段构造函数或setter方法把数据给它,然后调用device,但改变它一点点,这样

Call<PostResponse> device(@Body Post postData); 

并用您在该方法中创建的对象调用它。获得响应做这样的事

call.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<PostResponse> call, Response<ResponseBody> response) { 
      //save the response wherever you want 
     } 

     @Override 
     public void onFailure(Call<PostResponse> call, Throwable t) { 
     } 
    }); 

希望这会有所帮助,并试图阅读更多的改造,它的方式,就是要利用一下一些教程。

编辑

在onResponse方法,它会给你的API为从发布回一个响应。如果您使用该方法,则数据会发布到API,并且您会从中获得响应(例如,如果您将用户数据发送到API,后端将保存数据并为您提供发送确切用户数据的响应+ ID,这将在你的API响应中)。使用这个你连接到Android应用程序和后端,并确保你在同一页面上。通常你用响应一覆盖发送对象。

对于错误,请尝试调试onFailure方法。用t(可抛物体)写一个Toast或Timber并放置一个断点,以便读取错误。也可以尝试阅读this,因为它有类似问题的答案。

+0

你是什么意思与Pojo类 – utdev

+0

POJO - 普通旧Java对象。这是一个简单的java类的名称,它具有一些变量,getter和setter,在这个例子中,名为Post的类是pojo类。 – Dana

+0

我会接受这个,但我现在无法详细测试这个:) – utdev