【问题标题】:how to upload file from retrofit android java如何从改造android java上传文件
【发布时间】:2021-10-13 03:50:00
【问题描述】:

我正在使用改造将数据插入我的网络服务,我之前做过但没有上传图像并且插入成功,通过模型类的输入字段不在界面中,我如何添加一个输入字段来上传文件通过模型,以便可以将其发送到我的 Web 服务存储文件夹?

我试过但失败了请帮忙

我在活动中的插入

btnsubmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String tanggal = textdate.getText().toString();
                SimpleDateFormat formatter1=new SimpleDateFormat("dd/MM/yyyy");
                Date date1= null;
                try {
                    date1 = formatter1.parse(tanggal);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                SwabtestModel sw = new SwabtestModel();
                sw.sethasil(texthasil.getText().toString());
                sw.settanggal(date1);
                sw.settempat(texttempat.getText().toString());
                sw.setuserid(Integer.valueOf(txtuserid.getText().toString()));
                sw.setFile_name(new File(txturi.getText().toString()));
                save(sw);
            }
        });
public void save(SwabtestModel sw){
        Call<SwabtestModel> call = swabtestService.addswab(sw);
        call.enqueue(new Callback<SwabtestModel>() {
            @Override
            public void onResponse(Call<SwabtestModel> call, Response<SwabtestModel> response) {
                if(response.isSuccessful()){
                    String status = response.body().getStatus();
                    Toast.makeText(SwabtestActivity.this, status, Toast.LENGTH_LONG).show();                }
            }

            @Override
            public void onFailure(Call<SwabtestModel> call, Throwable t) {
                Log.e("ERROR: ", t.getMessage());
            }
        });
    }

对于我的文件选择器

public void onActivityResult(int request_code, int result_code, Intent data){
        super.onActivityResult(request_code,result_code,data);

        if(request_code==request_code && result_code== Activity.RESULT_OK){

            if(data==null){
                return;
            }
            uri= data.getData();
            filePath = uri.getPath();
            txturi.setText(filePath);
        }
    }
    public void openfilechooser(){
        Intent intent= new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("*/*");
        startActivityForResult(intent,request_code);
    }

对于我的模型类

public class SwabtestModel {

    @SerializedName("hasil")
    @Expose
    private String hasil;

    @SerializedName("tanggal")
    @Expose
    private Date tanggal;

    @SerializedName("tempat")
    @Expose
    private String tempat;

    @SerializedName("file_name")
    @Expose
    private File file_name;

    @SerializedName("user_id")
    @Expose
    private Integer user_id;


    String data;
    String status;

    public SwabtestModel(String hasil, Date tanggal, String tempat){

        this.hasil = hasil;
        this.tanggal = tanggal;
        this.tempat = tempat;
    }

    public void sethasil(String hasil) {
        this.hasil = hasil;
    }
    public String gethasil(){
        return hasil;
    }
    public void settanggal(Date tanggal) {
        this.tanggal = tanggal;
    }
    public Date gettanggal(){
        return tanggal;
    }
    public void settempat(String tempat) {
        this.tempat = tempat;
    }
    public String gettempat(){
        return tempat;
    }

    public void setuserid(Integer user_id) {
        this.user_id = user_id;
    }
    public Integer getuserid(){
        return user_id;
    }

    public void setFile_name( File file_name) {
        this.file_name =file_name ;
    }
    public File getfilename(){
        return file_name;
    }

    public String getData() {
        return data;
    }

    public String getStatus() {
        return status;
    }

}

我的界面

public interface swabtestService
{
    @GET("hasil-antigen-list")
    Call<List<SwabtestModel>> getUsers();

    @POST("insert-hantigen")
    Call<SwabtestModel> addswab(@Body SwabtestModel swabtest);
}

【问题讨论】:

    标签: java android android-studio


    【解决方案1】:

    @Part List&lt;MultipartBody.Part&gt; partFile这样的列表中获取数据

    private List<MultipartBody.Part> getMapPartListSave(List<PojoAttachDocList> fields) {
            List<MultipartBody.Part> mapPart = new ArrayList<>();
            for (int i = 0; i < fields.size(); i++) {
                **PojoAttachDocList** attachDoc = fields.get(i);
                if (!attachDoc.isAttached() && attachDoc.getDocFile() != null && attachDoc.getDocFile().exists()
                        && attachDoc.getDocFile().length() > 0) {
                    String fileParam = PARAMS_DOCUMENT + "[" + i + "]";
                    mapPart.add(MultipartBody.Part.createFormData(fileParam, attachDoc.getDocFile().getName(),
                            RequestBody.create(MediaType.parse("*/*"), attachDoc.getDocFile())));
                }
            }
            return mapPart;
        }
    

    将其转换为 MultipartBody

    【讨论】:

    • sry 但这不是我想要的
    【解决方案2】:

    要上传文件,您应该使用 Multipart,例如,请参考这篇文章,如果您有任何疑问请联系我https://stackoverflow.com/a/39953566

    【讨论】:

    • 我看过但没有直接通过模型,它们直接通过接口,我想要的是从模型中,这样我就不会过多地改变我的编码
    • 表示您想要一种通过模型存储/表示图像的方法。例如:私有字符串hasil?;还是别的什么?
    • 是的,我想要那样
    • 就像我模型中的其他字段
    • 使用byte[](字节数组),将你的图片转换成字节数组,然后尝试上传
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2018-11-06
    • 1970-01-01
    • 2017-10-11
    • 2022-01-11
    • 2021-07-21
    • 2018-04-03
    相关资源
    最近更新 更多