【问题标题】:RSSFeed exception in Android [closed]Android中的RSSFeed异常[关闭]
【发布时间】:2013-12-15 08:30:34
【问题描述】:

我想在我的 Android 设备上的文本框中查看新闻我已经获得了 xml 数据,但我无法解析我的数据以获取我的新闻

RSSFeedActivity 类

public class RSSFeedActivity extends Activity {
    /** Called when the activity is first created. */
    TextView a5bar;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        a5bar = (TextView)findViewById(R.id.Data_feed);
        String feed = "http://www.masrawy.com/News/rss/LocalPolitics.aspx";
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(feed);

        try {
            HttpResponse response =   client.execute(request);
            StatusLine st_line = response.getStatusLine();
            int statuescode = st_line.getStatusCode();
            if(statuescode ==200){

                InputStream jsonstream = response.getEntity().getContent();

BufferedReader reader = new BufferedReader(new InputStreamReader(jsonstream));
                StringBuilder builder = new StringBuilder();
                String line;
                while((line = reader.readLine())!=null){
                    builder.append(line);
                }
                String js_data = builder.toString();
                a5bar.setText(js_data);

                try{
                    JSONArray jArray = new JSONArray(js_data);
                    for(int i=0;i<jArray.length();i++)
                    {
                        JSONObject json_data = jArray.getJSONObject(i);
                        String id=json_data.getString("CNN");
                        Log.i("Feed", id);
                    }
                }
                catch(JSONException e){
                    Log.e("log_tag", "Error parsing data "+e.toString());
                }

            }


        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        super.onCreateOptionsMenu(menu);
        MenuInflater m_i_f = getMenuInflater();
        m_i_f.inflate(R.menu.cool_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        //return super.onOptionsItemSelected(item);

        switch(item.getItemId()){
        case R.id.aboutus:
            Toast.makeText(this, "Developed by Islam hamdy", Toast.LENGTH_LONG).show();
            break;
        case R.id.reference:
            Toast.makeText(this, "Go To My blog", Toast.LENGTH_LONG).show();
            break;
        }
        return false;
    }
}

xml文件

>     > <?xml version="1.0" encoding="utf-8"?> <LinearLayout
>     > xmlns:android="http://schemas.android.com/apk/res/android"
>     >     android:layout_width="fill_parent"
>     >     android:layout_height="fill_parent"
>     >     android:orientation="vertical" >
>     > 
>     > 
>     >     <TextView
>     >         android:layout_width="wrap_content"
>     >         android:layout_height="fill_parent"
>     >         android:layout_gravity="center"
>     >         android:text="@string/hello" 
>     >         android:id="@+id/Data_feed"
>     >         />
>     > 
>     >      </LinearLayout>

当我获取数据时,它就像一个网站 xml,并且语言没有出现

【问题讨论】:

  • 具体是什么问题?另外请注意格式,使代码可读。
  • 对不起,我现在让它可读
  • 使用 xml 为移动设备传输数据需要多出 60% 的带宽,请考虑使用 JSON 作为替代方案来节省带宽。
  • 你能编辑这段代码吗

标签: java android json eclipse exception


【解决方案1】:

您正在尝试使用解析 JSON 的代码解析 XML 响应,这是一个错误。我建议使用托管服务器将 xml 响应转换为 JSON。执行此操作的 php 代码将是。

<?php
$url="your_url_here";
$fileContents= file_get_contents($url);
$fileContents = str_replace(array("\n", "\r", "\t"), '', $fileContents);
$fileContents = trim(str_replace('"', "'", $fileContents));
$simpleXml = simplexml_load_string($fileContents);
$json = json_encode($simpleXml);
echo $json;
?>

在某处托管此内容并调用此页面以转换您的提要,这将降低移动客户端的带宽消耗。完成此操作后,就像在代码中所做的那样解析响应!

此外,您的代码尝试在其主线程上执行网络操作。这是非常不鼓励的!尝试在 android 2.3 以上,您的应用程序会立即崩溃!请参考使用 AsyncTask 类以避免在主线程上进行长时间运行的操作!

【讨论】:

  • 所以没有这段代码我无法解析 xml 数据???
  • 你可以......你可以使用几个库来帮助解析 XML!但是使用 XML 进行移动设备的数据传输会占用大量带宽!我建议你使用 JSON。它比 xml 轻 60%。自己搜索你就会知道其中的不同。
  • 你能告诉我这个库吗???
  • 如果你看到我的代码你发现我使用了 json,我已经使用了 json
猜你喜欢
  • 2012-12-09
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
相关资源
最近更新 更多