0

好的,我正在尝试下载一些 xml 并使用片段。我有一个未找到来源的错误,并相信我的代码有问题。logcat 没有产生任何错误,应用程序一打开就会关闭,这是我的主要片段

 package com.paad.earthquake;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.app.ListFragment;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;

public class EarthquakeListFragment extends ListFragment {

 ArrayAdapter<Quake> aa;
 ArrayList<Quake> earthquakes = new ArrayList<Quake>();

 @Override
  public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

int layoutID = android.R.layout.simple_list_item_1;
aa = new ArrayAdapter<Quake>(getActivity(), layoutID , earthquakes);
setListAdapter(aa);

refreshEarthquakes();
  }

  private static final String TAG = "EARTHQUAKE";
   private void refreshEarthquakes() {
    // Get the XML
     URL url;
    try {
      String quakeFeed = getString(R.string.quake_feed);
      url = new URL(quakeFeed);

    URLConnection connection;
  connection = url.openConnection();

  HttpURLConnection httpConnection = (HttpURLConnection)connection;
  int responseCode = httpConnection.getResponseCode();

  if (responseCode == HttpURLConnection.HTTP_OK) {
    InputStream in = httpConnection.getInputStream();

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();

    // Parse the earthquake feed.
    Document dom = db.parse(in);
    Element docEle = dom.getDocumentElement();

    // Clear the old earthquakes
    earthquakes.clear();

    // Get a list of each earthquake entry.
    NodeList nl = docEle.getElementsByTagName("entry");
    if (nl != null && nl.getLength() > 0) {
      for (int i = 0 ; i < nl.getLength(); i++) {
        Element entry = (Element)nl.item(i);
        Element title = (Element)entry.getElementsByTagName("title").item(0);
        Element g = (Element)entry.getElementsByTagName("georss:point").item(0);
        Element when = (Element)entry.getElementsByTagName("updated").item(0);
        Element link = (Element)entry.getElementsByTagName("link").item(0);

        String details = title.getFirstChild().getNodeValue();
        String hostname = "http://earthquake.usgs.gov";
        String linkString = hostname + link.getAttribute("href");

        String point = g.getFirstChild().getNodeValue();
        String dt = when.getFirstChild().getNodeValue(); 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'");
        Date qdate = new GregorianCalendar(0,0,0).getTime();
        try {
          qdate = sdf.parse(dt);
        } catch (ParseException e) {
          Log.d(TAG, "Date parsing exception.", e);
        }

        String[] location = point.split(" ");
        Location l = new Location("dummyGPS");
        l.setLatitude(Double.parseDouble(location[0]));
        l.setLongitude(Double.parseDouble(location[1]));

        String magnitudeString = details.split(" ")[1];
        int end =  magnitudeString.length()-1;
        double magnitude = Double.parseDouble(magnitudeString.substring(0, end));

        details = details.split(",")[1].trim();

        Quake quake = new Quake(qdate, details, l, magnitude, linkString);

        // Process a newly found earthquake
             addNewQuake(quake);
          }
        }
       }
    } catch (MalformedURLException e) {
        Log.d(TAG, "MalformedURLException", e);
    } catch (IOException e) {
      Log.d(TAG, "IOException", e);
    } catch (ParserConfigurationException e) {
  Log.d(TAG, "Parser Configuration Exception", e);
} catch (SAXException e) {
  Log.d(TAG, "SAX Exception", e);
}
finally {
}
  }

    private void addNewQuake(Quake _quake) {
     // Add the new quake to our list of earthquakes.
      earthquakes.add(_quake);

        // Notify the array adapter of a change.
       aa.notifyDataSetChanged();
      }

这是我的主要java类

package com.paad.earthquake;

  import android.os.Bundle;
  import android.support.v4.app.FragmentActivity;

   public class Earthquake extends FragmentActivity {

   @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
   }

}

这是我的主要 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="horizontal" >
 <fragment 
  android:name="com.paad.earthquake.EarthquakeListFragment"
    android:id="@+id/EarthquakeListFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

    </LinearLayout>

我也有一个助手类,但我认为你不必看到它。任何帮助表示赞赏。日志猫不抛出异常,甚至不知道从哪里开始寻找这个。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.paad.earthquake"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.INTERNET"/>

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".Earthquake"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

4

1 回答 1

1

根据我的经验,在没有堆栈跟踪的情况下直接在启动后关闭通常意味着您的 AndroidManifest.xml 文件存在问题。您是否在清单中声明了您的主要活动?

如果你这样做,你也可以在这里发布吗?

于 2012-09-28T03:26:17.217 回答