Не удалось достичь конечной точки perl в результате модернизации2 - PullRequest
0 голосов
/ 08 мая 2020

Я застрял в написании клиентского кода retfoit2 для попадания в какой-то очень старый perl устаревший код на сервере.

код сервера в perl

my $CFG = do "config.pl";
my $db_handle = DBI->connect ("DBI:mysql:$CFG->{database}", $CFG->{user}, $CFG->{password},  { RaiseError => 1 } );

my $cgi = CGI->new;
my $decdata = decode_json($cgi->param('POSTDATA'));
my $type = $decdata->{'Type'};

if ($type eq "ADD"){
    my $ProductID = $decdata->{'ProductID'};
    my $VariantID = $decdata->{'VariantID'};
    my $MRP = $decdata->{'MRP'};
    my $SellPrice = $decdata->{'SellPrice'};
    my $barCode = $decdata->{'barCode'};

    my $sql_query = qq (insert into table_product_varients values (?, ?, ?, ?, ?, NULL, 1, NOW(), NOW()));
    my $statement = $db_handle->prepare ($sql_query);
    $statement->execute($ProductID, $VariantID, $barCode, $MRP, $SellPrice);
}
elsif ($type eq "UPDATE"){
    my $ProductID = $decdata->{'ProductID'};
    my $VariantID = $decdata->{'VariantID'};
    my $MRP = $decdata->{'MRP'};
    my $SellPrice = $decdata->{'SellPrice'};
    my $barCode = $decdata->{'barCode'};

    my $sql_query = qq (UPDATE table_product_varients set product_mrp = ?, product_sellprice = ?, barcode = ? WHERE product_id = ? and varient_id = ?);
    my $statement = $db_handle->prepare ($sql_query);
    $statement->execute($MRP, $SellPrice, $barCode, $ProductID, $VariantID);
}

Код модернизации

@FormUrlEncoded
@POST("cgi-bin/ProductVariantQuery.pl")
public Call<String> updateProductVariant(@Field("POSTDATA") String jsonObject);


JSONObject jsonObject = new JSONObject();
try {
    jsonObject.put("Type", "UPDATE");
    jsonObject.put("ProductID", ProductID);
    jsonObject.put("VariantID", VariantID);
    jsonObject.put("MRP", mrp.toString());
    jsonObject.put("SellPrice", sellPrice.toString());
} catch (JSONException e) {
    e.printStackTrace();
}


Call<String> call =  restInterface.updateProductVariant(jsonObject.toString());

call.enqueue(new Callback<String>() {
    @Override
    public void onResponse(Call<String> call , Response<String> response) {
        //APIResponse apiResponse = response.body();
        //Utility.displayToast(apiResponse.getMessage());
        Utility.displayToast("Updated!");
        productVariant.setMRP(mrp);
        productVariant.setSellPrice(sellPrice);
        notifyDataSetChanged();
    }

    @Override
    public void onFailure(Call<String> call , Throwable t) {

        //loading.dismiss();
        Utility.displayToast("some error");
    }
});

Я попробовал внести несколько изменений, но увидел одну или другую ошибку.

С помощью приведенного выше кода я получаю исключение JAVAEOF.

Что может быть не так? указатель муравья приветствуется.

1 Ответ

0 голосов
/ 08 мая 2020

Как я заметил из вашего кода, на самом деле вы запрашиваете данные (отправляя параметр сообщения) как json, но вы запрашиваете как поле, поэтому вам нужно изменить его с помощью кода ниже

import com.google.gson.annotations.SerializedName;
public class JsonRequestParent {

    @SerializedName("POSTDATA")
    private JsonChild jsonChild;

    public JsonRequestParent(JsonChild jsonChild) {
        this.jsonChild = jsonChild;
    }
}

/ / Другой дочерний класс paramas

import com.google.gson.annotations.SerializedName;
public class JsonChild {

    @SerializedName("Type")
    private String type;

    @SerializedName("ProductID")
    private int productID;

    @SerializedName("VariantID")
    private int VariantID;

    @SerializedName("MRP")
    private String MRP;

    @SerializedName("SellPrice")
    private String SellPrice;


    public JsonChild(String type, int productID, int variantID, String MRP, String sellPrice) {
        this.type = type;
        this.productID = productID;
        VariantID = variantID;
        this.MRP = MRP;
        SellPrice = sellPrice;
    }
}

и, наконец, нажмите api

 @POST("cgi-bin/ProductVariantQuery.pl")
    public Call<APIResponse> updateProductVariant(@Body JsonRequestParent jsonRequestParent);

// Вызовите, как показано ниже, чтобы получить непосредственно проанализированные данные и не забыть установить в настройке модернизации .addConverterFactory (gsonFactory)

void hitAi(){
    Call<APIResponse> call =  restInterface.updateProductVariant(createRequest());

    call.enqueue(new Callback<APIResponse>() {
        @Override
        public void onResponse(Call<APIResponse> call , Response<APIResponse> response) {

            if (response.isSuccessful()){
                // do whatever you want to do 
            }else {
                //error
                response.errorBody();
            }
        }

        @Override
        public void onFailure(Call<APIResponse> call , Throwable t) {
            t.getLocalizedMessage()
            //loading.dismiss();
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...