PHP:读取json arraylist并在mysql中保存数据?

java php android json retrofit2

368 观看

4回复

17 作者的声誉

我想arraylist从android 读入php以便存储在中database,但无法找到确切的代码。有人可以指导我解决这个问题的方向吗?

这是我的Java代码,用于创建 arraylist

private void loadCart()
{

    productList.clear();
    Cursor cursor = dbHelper.getCarProducts();
    cursor.moveToFirst();
    do {
        CartProduct cartProduct = new CartProduct();
        cartProduct.setProductName("Name: "+cursor.getString(cursor.getColumnIndex("_Name")));
        cartProduct.setProductCost("Cost: "+cursor.getString(cursor.getColumnIndex("_Cost")));
        cartProduct.setProductPrice("Price: "+cursor.getString(cursor.getColumnIndex("_Price")));
        cartProduct.setProductQuantity("Quantity: "+cursor.getString(cursor.getColumnIndex("_Quantity")));
        productList.add(cartProduct);

    }while(cursor.moveToNext());


}

我正在使用retrofit2以便将arraylist发送到服务器,但是正如我在其他问题中看到的那样,我无法获取file_get_contents的URL?

作者: atul kumar 的来源 发布者: 2017 年 9 月 15 日

回应 4


1

172 作者的声誉

干得好...

第1步:在gradle.app中添加改造依赖项

compile 'com.squareup.retrofit:retrofit:1.9.0'

步骤2:制作一个RestClient类,如下所示。

public class RestClient {
    private static final String BASE_URL = DataConstants.TEST_URL; //Place your web service URL here
    private ApiInterface apiService;

    public RestClient()
    {
        RequestInterceptor requestInterceptor = new RequestInterceptor() {
            @Override
            public void intercept(RequestFacade request) {

                request.addHeader("Accept", "application/json");
            }
        };

        RestAdapter restAdapter = new RestAdapter.Builder()
                .setLogLevel(RestAdapter.LogLevel.FULL)
                .setRequestInterceptor(requestInterceptor)
                .setEndpoint(BASE_URL)
                .build();

        apiService = restAdapter.create(ApiInterface.class);
    }

    public ApiInterface getApiService()
    {
        return apiService;
    }
}

步骤3:为POST URL建立接口。

public interface ApiInterface {
    @POST("/sendData")
    void sendData(@Body JsonObject jsonObject,
                          Callback<DataModel> dataModelCallback);
}

步骤4:制作一个POJO类,如下所示。

public class DataModel{
    private String success;

public String getSuccess() {
        return success;
    }

public void setSuccess(String success) {
        this.success = success;
    }

}

步骤5:从您的活动中拨打网络服务,如下所示。

private void callWebService(String user_id) {
        try {//TODO SEND
            final Utility utility = new Utility(this);
            utility.showProgressDialog();
            JsonObject myJsonData = new JsonObject();
            myJsonData.addProperty("user_id", user_id);
            Gson gsonData = new GsonBuilder().create();
            JsonArray dataArray = new JsonArray();
            dataArray = gsonData.toJsonTree(productList).getAsJsonArray();  //Here you want to add your array list i.e productList
            myJsonData.add("assign_to", jaAssignee);

            new RestClient().getApiService().sendData(myJsonData, new Callback<DataModel>() {
                @Override
                public void success(DataModel dataModel, Response response) {
                    utility.hideProgressDialog();
                    try {
                        String success = dataModel.getSuccess();
                        if (success.equalsIgnoreCase("Success")) {
                            //Do what you want to do
                        }
                    } catch (Exception e) {
                    }
                }

                @Override
                public void failure(RetrofitError error) {
                    utility.hideProgressDialog();
                }
            });
        } catch (Exception e) {
        }
    }

希望这个能对您有所帮助!

作者: SWAPDROiD 发布者: 2017 年 9 月 15 日

0

54 作者的声誉

一次性发送所有数据。创建JsonArray并通过创建JsonObject添加每个对象。完成后,一次性上传所有数据。您只需要在php中解码该数组即可。

使用此方法的优势是,您可以很好地管理改造中的响应(使其异步)

作者: The90sArtist 发布者: 2017 年 9 月 15 日

0

674 作者的声誉

你可以分析json的价值php

<?php 
   header('Content-type: application/json');
   $jsonString = file_get_contents('php://input');   
   $jsonArray = json_decode($jsonString,true);

   print_r($jsonArray);/* print array */

?>

作者: Pritamkumar 发布者: 2017 年 9 月 15 日

0

17 作者的声誉

决定

经过将近3个多星期和n +多个小时的挫折搜索之后,我终于找到了解决我的问题的可行解决方案,并与人们分享,以便他们可以从中受益(因为由于问了太多,我被另一个空调拒之门外问题和不赞成票),为了将阵列列表发送到服务器,我们需要使用另一个库,根据我的需要,最合适的是循环j的async-http库,这些是在库中导入和使用库的步骤您的程序:

1.)通过在bulid.gradle(app模块)中编写以下语句,将库导入到您的项目中:

编译'com.loopj.android:android-async-http:1.4.9'

2)创建以下变量以便在程序中使用它们:

 AsyncHttpClient (a client to send data to your server)
    RequestPrarms (Data sent to your server for parsing and further operations )
    String url(Link to your server where actually operations occurs)

3.)现在我们使用这些变量并运行程序:

p

arams.put("OrderSummary", <your array list>);
           httpClient.post(APIURL.API_URL,params, new AsyncHttpResponseHandler() {
               @Override
               public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                   //your operations on success
               }

               @Override
               public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                    Toast.makeText(getApplicationContext(),error.toString(),Toast.LENGTH_LONG).show();
               }
           });  

我希望这可以消除您的疑虑,我仍在创建我的php端,以便在数据库中插入数据

作者: atul kumar 发布者: 2017 年 10 月 9 日
32x32