繁体   English   中英

构建请求时出现Android Retrofit错误

[英]Android Retrofit error while building a request

当我尝试使用Retrofit执行RESTfull服务时,我想知道是否有人能告诉我为什么我收到错误的请求错误

错误:HTTP / 1.1 400错误请求

这是我的两个班级:

RetrofitInterface:

public class RetrofitInterface {
    private static StockApiInterface sStockService;

    public static StockApiInterface getStockApiClient() {
        if (sStockService == null) {
            RestAdapter restAdapter = new RestAdapter.Builder()
                    .setEndpoint("http://query.yahooapis.com/v1/public")
                    .build();
            sStockService = restAdapter.create(StockApiInterface.class);
        }

        return sStockService;
    }

    public interface StockApiInterface {
        @GET("/yql")
        void listQuotes(@Query("q") String query,Callback<Stock> stockInfo);
    }


}

MainActivity中的Asyntask

public class extraThread extends AsyncTask<Void, Void, Void>{

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        RetrofitInterface.getStockApiClient().listQuotes("select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(\"AIB.IR\")%0A%09%09&format=json&diagnostics=true&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=", new Callback<Stock>() {


            @Override
            public void failure(RetrofitError arg0) {
                // TODO Auto-generated method stub
                arg0.printStackTrace();
            }

            @Override
            public void success(Stock arg0, Response arg1) {
                // TODO Auto-generated method stub

            }
        });

    }

}

结果总是失败。 我原本以为问题是Retrofit内置的gson转换器无法将响应转换为stock对象,因为我只收到了“Retrofit.retrofiterror”响应。但是'Bad Request'响应让我觉得问题在于api的URL。这是我想要的回复网址:

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22AIB.IR%22)%0A%09%09&format=json&diagnostics=true&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=

谁能告诉我,如果我在我的代码中正确构建这个? 一个可能的问题是我在查询中逃避了我的引用。 也许这会导致问题?

以防我发布我的Stock对象。 我是在在线POJO转换器的帮助下写的

public class Stock {

    @Expose
    private Query query;

    public Query getQuery() {
        return query;
    }


    public void setQuery(Query query) {
        this.query = query;
    }

}

任何有关这方面的帮助将不胜感激。

您尝试使用一个查询字符串参数而不是多个。 这不起作用,请参考这个问题 此外,无需编码查询内容,Retrofit将自动执行(请参阅文档 ):

参数值默认为URL编码。 指定encodeValue = false以更改此行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM