Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – Volley库忽略format = feed&type = rss Params大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要使用Volley库获取RSS Feed但是Volley一直忽略我的格式= Feed& type = RSS Params.
我尝试了所有的东西,但我无法让它工作.
这是我的网址:http://almesryoon.com/دفتر-أحوال-الوطن?format = Feed& type = RSS
注意:此网址适用于Google PostMan
我的SimpleXmlrequest类:

public class SimpleXmlrequest<T> extends request<T> {

    private static final serializer serializer = new Persister();
    private final Class<T> clazz;
    private final Map<String,String> headers;
    private final Listener<T> listener;


    /**
     * Make http request and return a parsed object from Response
     * Invokes the other constructor.
     *
     * @see SimpleXmlrequest#SimpleXmlrequest(int,String,Class,Map,Listener,ErrorListener)
     */
    public SimpleXmlrequest(int method,String url,Class<T> clazz,Listener<T> listener,ErrorListener errorListener) {
        this(method,url,clazz,null,listener,errorListener);
    }


    /**
     * Make http request and return a parsed object from XML Response
     *
     * @param url URL of the request to make
     * @param clazz Relevant class object
     * @param headers Map of request headers
     * @param listener
     * @param errorListener
     *
     */
    public SimpleXmlrequest(int method,Map<String,String> headers,ErrorListener errorListener) {
        super(method,errorListener);
        this.clazz = clazz;
        this.headers = headers;
        this.listener = listener;
    }


    @Override
    public Map<String,String> getHeaders() throws AuthFailureError {
        return headers != null ? headers : super.getHeaders();
    }


    @Override
    protected void deliverResponse(T responsE) {
        listener.onResponse(responsE);
    }

    @Override
    public String getBodyContentType() {
        return "application/xml";
    }

    @Override
    protected Response<T> parseNetworkResponse(NetworkResponse responsE)
    {
        try {

            String data = new String(response.data,httpHeaderParser.parseCharset(response.headers));// The problem here this data is not XML

            return Response.success(serializer.read(clazz,data),httpHeaderParser.parseCacheHeaders(responsE));
        }
        catch (UnsupportedEncodingException E) {
            return Response.error(new ParseError(E));
        }
        catch (Exception E) {
            return Response.error(new VolleyError(e.getmessage()));
        }
    }
}

此外,我试图使用METHOD.POST与getParams()方法
目标RSS

<?xml version="1.0" encoding="utf-8"?>
<!-- generator="Joomla! - open source Content Management" -->
<RSS version="2.0" 
    xmlns:atom="http://www.w3.org/2005/Atom">
    <chAnnel>
        <title>title</title>
        <description>Description</description>
        <link>http://google.com</link>
        <lastBuildDate>Thu,31 Mar 2016 01:27:12 +0200</lastBuildDate>
        <generator>Joomla! - open source Content Management</generator>
        <atom:link rel="self" type="application/RSS+xml" href="http://example.com/example?format=Feed&amp;type=RSS"/>
        <language>ar-aa</language>
        <item>
            <title>Item1</title>
            <link>http://example.com/example1</link>
            <guid isPermaLink="true">http://example.com/example1</guid>
            <description>Description1</description>
            <author>admin</author>
            <category>Category1</category>
            <pubDate>Wed,30 Mar 2016 18:49:37 +0200</pubDate>
        </item>
        <item>
            <title>Item2</title>
            <link>http://example.com/example2</link>
            <guid isPermaLink="true">http://example.com/example2</guid>
            <description>Description2</description>
            <author>admin</author>
            <category>Category1</category>
            <pubDate>Wed,30 Mar 2016 18:49:37 +0200</pubDate>
        </item>
    </chAnnel>
</RSS>

我正在使用此代码并且它工作正常,但现在不推荐使用httpParams,BasichttpParams,httpconnectionParams,DefaulthttpClient,httpGet,httpResponse和httpentity.
我的工作代码

StringBuilder chaine = new StringBuilder("");

        try {

            httpParams httpParameters = new BasichttpParams();
            // Set the timeout in milliseconds until a connection is established.
            // The default value is zero,that means the timeout is not used.
            int timeoutConnection = AppConstants.CONNECTION_TIMEOUT_SEC * 1000;
            httpconnectionParams.setConnectionTimeout(httpParameters,timeoutConnection);
            // Set the default socket timeout (SO_TIMEOUT)
            // in milliseconds which is the timeout for waiTing for data.
            int timeoutSocket = AppConstants.soCKET_TIMEOUT_SEC * 1000;
            httpconnectionParams.setSoTimeout(httpParameters,timeoutSocket);

            // request method is GET
            DefaulthttpClient httpClient = new DefaulthttpClient(httpParameters);
            httpGet httpGet = new httpGet(url);

            httpResponse httpResponse = httpClient.execute(httpGet);
            httpentity httpentity = httpResponse.getEntity();

            InputStream inputStream = httpentity.getContent();

            BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream));

            String line;

            while ((line = rd.readLine()) != null) {

                chaine.append(linE);

            }

            rd.close();

        } catch (IOException E) {
            // wriTing exception to log
            e.printStackTrace();
        }

解决方法

请使用以下网址获取您所需的RSS

https://m.almesryoon.com/%d8%af%d9%81%d8%aa%d8%b1-%d8%a3%d8%ad%d9%88%d8%a7%d9%84-%d8%a7%d9%84%d9%88%d8%b7%d9%86?format=Feed&type=RSS&template=mobile

这是日志:

...
D/dalvikvm: GC_FOR_ALLOC freed 27K,12% free 6432K/7303K,paused 20ms,@R_187_10586@l 20ms
I/OnResponse: <?xml version="1.0" encoding="utf-8"?>
              <!-- generator="Joomla! - open source Content Management" -->
              <RSS version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
                <chAnnel>
                    <title>دفتر أحوال الوطن - المصريون</title>
                    <description>المصريون صحيفة يومية مستقلة تنشر آخر وأهم أخبار مصر والوطن العربى والعالم</description>
                    <link>https://m.almesryoon.com/دفتر-أحوال-الوطن</link>
                    <lastBuildDate>Thu,23 Feb 2017 04:36:51 +0200</lastBuildDate>
                    <generator>Joomla! - open source Content Management</generator>
                    <atom:link rel="self" type="application/RSS+xml" href="https://m.almesryoon.com/دفتر-أحوال-الوطن?format=Feed&amp;type=RSS&amp;template=mobile"/>
                    <language>ar-aa</language>
                    <item>
                    ...

在使用您的服务器URL测试一些示例代码后,我发现它得到了301响应.从您的第一个网址,第二个网址将是(https)

https://almesryoon.com/%D8%AF%D9%81%D8%AA%D8%B1-%D8%A3%D8%AD%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D9%88%D8%B7%D9%86?format=Feed&type=RSS

第三个网址将是:

http://m.almesryoon.com/%d8%af%d9%81%d8%aa%d8%b1-%d8%a3%d8%ad%d9%88%d8%a7%d9%84-%d8%a7%d9%84%d9%88%d8%b7%d9%86?template=mobile

最后的网址是(https):

https://m.almesryoon.com/%d8%af%d9%81%d8%aa%d8%b1-%d8%a3%d8%ad%d9%88%d8%a7%d9%84-%d8%a7%d9%84%d9%88%d8%b7%d9%86?template=mobile

使用此最终URL和下面的示例代码,您将获得200个响应代码.我想你可以用我上面提到的最终网址尝试你的代码.

requestQueue queue = Volley.newrequestQueue(this);
String url = "https://m.almesryoon.com/%d8%af%d9%81%d8%aa%d8%b1-%d8%a3%d8%ad%d9%88%d8%a7%d9%84-%d8%a7%d9%84%d9%88%d8%b7%d9%86?template=mobile";
Stringrequest request = new Stringrequest(url,new Response.Listener<String>() {
    @Override
    public void onResponse(String responsE) {
        Log.i("onResponse",responsE);
    }
},new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("onErrorResponse",error.toString());
    }
});

queue.add(request);

关于在Volley中处理301响应,我还没试过,但是,您可以阅读以下问题以获取更多信息

Android volley to handle redirect

大佬总结

以上是大佬教程为你收集整理的android – Volley库忽略format = feed&type = rss Params全部内容,希望文章能够帮你解决android – Volley库忽略format = feed&type = rss Params所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。