当前位置: 首页 > 知识库问答 >
问题:

将服务器响应从For-Each-Loop中的reverfit2调用保存到文件、数据库或new List/ArrayList

马宜民
2023-03-14

我正在处理一个Android应用程序,并收到一个服务器响应,我希望将该响应存储在数据库中,或者存储在ArrayList或List中,以便遍历这些值,并将这些值与扫描的字符串进行比较;记录的输出是我需要和想要保存的数据;不幸的是,我的Java技能不是很好,所以我不知道如何将这些数据保存在其他列表或ArrayList中。我需要的数据就在那里,所以我真的不知道如何存储它。

这是API调用:

public static void writeItemsToDatabase(Context mContext, String basic) {

        //creating the itemApi interface
        ItemApi itemApi = retrofit.create(ItemApi.class);

        //making the call object
        Call<List<Item>> call = itemApi.checkItems(basic);

        call.enqueue(new Callback<List<Item>>() {
            @Override
            public void onResponse(@NonNull Call<List<Item>> call,
                                   @NonNull Response<List<Item>> response) {
                if (response.isSuccess()) {
                    List<Item> itemList;
                    itemList =  response.body();
                    int dataSize = response.body().size();
                    Log.d(TAGGG, String.valueOf(dataSize));
                    itemList.forEach(List -> Log.d(TAGGG, String.valueOf(List.getEan())));
                    itemList.forEach(List -> Log.d(TAGGG, String.valueOf(List.getNo())));

                    class DownloadTask extends AsyncTask<String, Integer, String> {

                        // Runs in UI before background thread is called
                        @Override
                        protected void onPreExecute() {
                            super.onPreExecute();
                            // Do something like display a progress bar
                        }

                        // This is run in a background thread
                        @Override
                        protected String doInBackground(String... params) {
                            // Do something that takes a long time, for example:

                                try (DatabaseHandler erpDevelopment = new DatabaseHandler((XXXApp)
                                        mContext.getApplicationContext())) {
                                    itemList.stream().limit(4600).forEach(item -> {
                                        erpDevelopment.addItem(item);
                                        erpDevelopment.close();
                                    });
                                }
                                // Call this to update your progress

                            return "this string is passed to onPostExecute";
                        }

                        // This is called from background thread but runs in UI
                        @Override
                        protected void onProgressUpdate(Integer... values) {
                            super.onProgressUpdate(values);
                            // Do things like update the progress bar
                        }
                        // This runs in UI when background thread finishes
                        @Override
                        protected void onPostExecute(String result) {
                            super.onPostExecute(result);
                            // Do things like hide the progress bar or change a TextView
                        }
                    }
                    new DownloadTask().execute();
                }
            }

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

这是项目类:

package com.example.xxx;


import com.google.gson.annotations.SerializedName;

public class Item {

    @SerializedName("no")
    private String no;

    @SerializedName("ean")
    private String ean;

    @SerializedName("name")
    private String name;

    @SerializedName("itemgroupname")
    private String itemgroupname;

    @SerializedName("type")
    private String type;

    @SerializedName("destruction")
    private Boolean destruction;

    @SerializedName("archived")
    private Boolean archived;

    public Item(String no, String ean, String name, String type, String itemgroupname, Boolean destruction,
                Boolean archived) {
        this.no = no;
        this.name = name;
        this.type = type;
        this.ean = ean;
        this.itemgroupname = itemgroupname;
        this.destruction = destruction;
        this.archived = archived;
    }

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }

    public String getEan() {
        return ean;
    }

    public void setEan(String ean) {
        this.ean = ean;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getItemgroupname() {
        return itemgroupname;
    }

    public void setItemgroupname (String Itemgroupname) {
        this.itemgroupname = itemgroupname;
    }

    public boolean getDestruction() {
        return destruction;
    }

    public void setDestruction (Boolean Destruction ) {
        this.destruction = destruction;
    }

    public boolean getArchived() {
        return true;
    }

    public void setArchived (Boolean Archived ) {
        this.archived = archived;
    }
}

我想稍后存储在数据库中的输出,但首先存储在文件或数组列表或列表中,如下所示:

  itemList.forEach(List -> Log.d(TAGGG, String.valueOf(List.getEan())));
  itemList.forEach(List -> Log.d(TAGGG, String.valueOf(List.getNo())));

这正是我所需要的数据,因此我不知道如何将数据分开;我有一个数据库,但首先我希望将它存储在文件中或数组列表/列表中,这取决于什么更有意义。

我该怎么做?ForEach-Loop将分别保存list.getean()和list.getno()中的所有数据,会是什么样子?任何提示或帮助将非常感谢,提前感谢。

共有1个答案

轩辕鸿
2023-03-14

好的...首先声明两个字符串列表。一个用于Ean,另一个用于No。

List<String> EanList = new ArrayList<>();
List<String> NoList = new ArrayList<>();

按如下方式添加它们:

public static void writeItemsToDatabase(Context mContext, String basic) 
{
    List<String> EanList = new ArrayList<>();
     List<String> NoList = new ArrayList<>();
................
}

然后在响应成功时执行以下操作:

if(response.isSuccess())
{
    int dataSize = itemList.size();

    for(int i=0; i<dataSize; i++)
    {
         EanList.add(itemList.get(i).getEan());
         NoList.add(itemList.get(i).getNo());
     }
}

在这里,您只需要将值复制到另外两个字符串列表中。运行for循环后,您的EanList和NoList将包含各自的值。

 类似资料:
  • 问题内容: 在这里和其他地方,我已经看到许多对此的部分答案,但是我非常适合作为新手程序员,并希望找到一个彻底的解决方案。我已经能够在Chrome Canary(v。29.x)中设置笔记本电脑麦克风的录制音频,并且可以使用recorder.js相对容易地设置录制.wav文件并将其保存在本地,例如: http://webaudiodemos.appspot.com/AudioRecorder/inde

  • 我目前的项目基于Spring Batch和Spring集成。 我的目标是使用Spring Batch执行作业流程步骤: 从SFTP服务器读取文件(步骤1) 解密文件(步骤2) 将文件保存到数据库中(步骤3) 我想把它分成步骤队列(从sftp读取、解密、写入数据库)。我还需要保存文件、传输开始时间、传输结束时间、文件大小到数据库。 几天前,我使用Spring集成从sftp服务器轮询文件,然后将其发送

  • 前面一个章节中我们讲了关于SQLiteOpenHelper的创建,但是我们需要在必要的时候有方法去保存我们的数据到数据库,或者从我们的数据库中查询数据。另外一个叫ForecastDb类就会做这件事。

  • 我正在使用Yii2和Kartik的FileInput扩展。我在保存到目录时遇到问题。我正在使用yii高级模板,并使用gii生成CRUD代码。我现在正在编辑它。 当我保存它时,它拒绝保存并显示“请上传文件”消息。 将保存的文件. doc和. pdf大部分。 如果我在模型中设置'skipOnEmpty=True',它将保存表单而不是文件。 mysql表上的数据类型设置为VARCHAR,因为我只想保存其

  • 我有Fragment1和fragment2。Fragment1是EditTexts的一种形式,它将其数据保存到文本文件中。我希望用户能够在Fragment1和Fragment2之间来回滑动,每次滑动时,来自Fragment1的数据都会保存到一个文件中。 到目前为止,我已经使用ViewPager将每个表单实现为一个新的片段,并使用在用户每次滑动时保存文件。这是可行的,但用户输入的数据完全为空。 这是

  • 我正在为我的API构建一些简单的负载测试,为了确保一切正常,我还想查看响应标头和数据。但是当我使用命令行运行测试,然后重新打开GUI以添加查看结果树侦听器并加载创建的文件时,响应标头或响应数据为空。 我在user.properties中输入了以下值(也尝试在jmeter.properties中取消这些值的注释并在那里更改它们,结果相同) 但在打开结果文件时仍然没有运气。我尝试在 -l 标记之后将文