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

改装多重呼叫-Android系统

王刚毅
2023-03-14

我有一个字符串数组,我想调用Reterfit这么多次,因为这个数组的大小实际上是。但是现在,尽管我在这个循环中声明了loop并调用了referfit,但当我在调试模式下运行时,我看到我的应用程序从来没有在ApiHit方法中输入onRespons,除非他到达for循环的结尾。然后finnaly,他在每个循环迭代中做我想做的事情(输入到onResponse并执行我的其余代码,其中包括)。现在每个迭代调用:

call = tagApi.getTasks(tags);
call.enqueue(new Callback<Api>()

并转到方法的末尾,跳过onResponse和onFailure。为什么?

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //hide toolbar
        /*Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);*/

        ButterKnife.bind(this);
        listTags = new ArrayList<>();
        listTagsFinal = new ArrayList<>();
        listTagsRest = new ArrayList<>();
        strings = new ArrayList<>();

        //search text handler
        svSearch.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                result = query.split(",?\\ ");
                //numberTag = result.length;
                for (int i = 0; i < result.length; i++) {
                    ApiHit(result[i]);
                    }
                    FinalSort();
                return true;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                //This is your adapter that will be filtered
                return false;
            }
        });

    }
public void ApiHit(final String tags) {

        //retrofit
        TagApi tagApi = NetworkService.retrofit.create(TagApi.class);
        Call<Api> call;

        //recieve words from searchview, divide and put into string array


            call = tagApi.getTasks(tags);
            call.enqueue(new Callback<Api>() {


                @Override
                public void onResponse(Call<Api> call, Response<Api> response) {


                    //recieve possible tags for one word and put it into list
                    for (int i = 0; i < response.body().getResults().size(); i++) {

                        listTags.add(new RowModel(response.body().getResults().get(i).getTag(), response.body().getResults().get(i).getAbsRelevance()));
                    }


                    //sort whole list
                    Collections.sort(listTags);


                    //add first tags to list
                    if (listTags.size()>0) {
                        for (int y = 0; y < 3 && y < listTags.size() ; y++) {
                            listTagsFinal.add(new RowModel(listTags.get(y).getName(), listTags.get(y).getPosition()));
                        }
                    }
                    if (!isTagognizerTag) {
                        listTagsFinal.add(new RowModel("tagognizer", 0.0022055893));
                        isTagognizerTag = true;
                    }

                    //add rest tags to list
                    for (int y = 3; y < listTags.size(); y++) {
                        listTagsRest.add(new RowModel(listTags.get(y).getName(), listTags.get(y).getPosition()));
                    }


                    //create final array when response reach last tag
                   /* if (checker == tags.length) {

                        //final sort
                        FinalSort();

                    }*/


                    listTags.clear();
                    checker++;

                }

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

            });

        }

公共类Api{

@SerializedName("geo")
@Expose
private List<Float> geo = null;
@SerializedName("rank")
@Expose
private int rank;
@SerializedName("results")
@Expose
private List<Result> results = null;
@SerializedName("tag")
@Expose
private String tag;
@SerializedName("tagExists")
@Expose
private boolean tagExists;

public List<Float> getGeo() {
    return geo;
}

public void setGeo(List<Float> geo) {
    this.geo = geo;
}

public int getRank() {
    return rank;
}

public void setRank(int rank) {
    this.rank = rank;
}

public List<Result> getResults() {
    return results;
}

public void setResults(List<Result> results) {
    this.results = results;
}

public String getTag() {
    return tag;
}

public void setTag(String tag) {
    this.tag = tag;
}

public boolean isTagExists() {
    return tagExists;
}

public void setTagExists(boolean tagExists) {
    this.tagExists = tagExists;
}

}

共有1个答案

咸琪
2023-03-14

如果Regetfit跳过onResponse和onFailure方法,则在GET、POST方法中出现错误。正确检查方法类型。我有过一次问题。

 类似资料:
  • 我使用restful api进行语音调用。我用这个来称呼自己。当我的电话响时,我不接通就挂断了。大约20秒后,我又接到了Twilio的电话。 curl'https://api.twilio.com/2010-04-01/accounts/accountsid/calls.json'-x post--data-urlencode'to=+1111111'--data-urlencode'from=+

  • 我想知道如何将response.body()作为参数传递,以便进一步处理它。因为现在我只能将其传递给Toast或text View的setText,它工作得很好。但是如果我尝试将其传递给将其保存为SharedPrefs或类似的函数,它只是传递一个空对象。我不明白为什么第一个有效,但第二个无效,有什么区别? 我的JSON响应正文如下所示: 我的Pojo是这样的: 我执行调用的函数(在点击登录按钮后调

  • 我想在Android系统中拦截来电。一种方法是扩展“broadcastreceiver”。还有别的办法吗?

  • 我使用com.squareup.reformation:reformation:2.0.0-beta2,遇到了一些问题。我想添加通过按钮关闭部分下载的可能性。因此,我在OkHTTPClient中找到了cancel(对象标记)方法。我试图找到可以放置此标记值的位置,但没有找到任何东西。同样,将null作为参数传递也根本不起作用。有人能告诉我在哪里可以贴标签或建议其他方法吗?

  • 如果使用基于回调的异步测试,如果done()多次调用Mocha,则会抛出错误。这对于捕获意外的双重回调非常方便。 it('double done', function(done) { // Calling `done()` twice is an error setImmediate(done); setImmediate(done); }); 运行上面的测试将给出以下错误消息: $ ./nod

  • 我在调用我的onLeScan时遇到问题。我在开始扫描中放置了一个标签,每次都会被调用。出于某种原因,我的onLeScan永远不会被调用。有人看到我所做的有问题吗?onLeScan应该在开始扫描后立即调用,对吗? 编辑更改了我的onLeScan函数。仍然不起作用,但我认为我正在走向正确的道路。DeviceBeacon是一个只包含方法的类:getName()、getSignal()和getAddres