2016-07-07 15 views
-6

Ich habe ein Problem mit meiner Android App. Es stürzt immer ab, wenn ich den Button drücke, um zu der neuen Aktivität zu gelangen.Android App stürzt ab, indem Sie die Aktivität wechseln

Fehler:

FATAL EXCEPTION: main 
Process: PID: 15534 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.realliferpgadac.thomas.adacapp/com.realliferpgadac.thomas.adacapp.Feed}: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.view.ViewGroup 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.view.ViewGroup 
at android.app.BackStackRecord.configureTransitions(BackStackRecord.java:1244) 
at android.app.BackStackRecord.beginTransition(BackStackRecord.java:978) 
at android.app.BackStackRecord.run(BackStackRecord.java:707) 
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) 
at android.app.FragmentController.execPendingActions(FragmentController.java:325) 
at android.app.Activity.performStart(Activity.java:6252) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Quellcode der Aktivität, die Abstürze: (Es sollte ein RSS-Feed sein)

import android.os.AsyncTask; 
import android.os.Bundle; 


import org.xmlpull.v1.XmlPullParser; 
import org.xmlpull.v1.XmlPullParserException; 
import org.xmlpull.v1.XmlPullParserFactory; 

import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.app.ListFragment; 

import android.view.MenuItem; 
import android.widget.ArrayAdapter; 

import java.io.StringReader; 

public class Feed extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_feed); 

     if (savedInstanceState == null) { 
      getFragmentManager().beginTransaction() 
        .add(R.id.tvFeed, new PlaceholderFragment()) 
        .commit(); 
     } 
    } 


    //@Override 
    // public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     //getMenuInflater().inflate(R.menu.main, menu); 
     //return true; 
    //} 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.tvFeed) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    /** 
    * A placeholder fragment containing a simple view. 
    */ 
    public static class PlaceholderFragment extends ListFragment { 

//  private TextView mRssFeed; 

     public PlaceholderFragment() { 
     } 

//  @Override 
//  public View onCreateView(LayoutInflater inflater, ViewGroup container, 
//         Bundle savedInstanceState) { 
//   View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
//   mRssFeed = (TextView) rootView.findViewById(R.id.rss_feed); 
//   return rootView; 
//  } 

     @Override 
     public void onStart() { 
      super.onStart(); 
      new GetAndroidPitRssFeedTask().execute(); 
     } 

     private String getAndroidPitRssFeed() throws IOException { 
      InputStream in = null; 
      String rssFeed = null; 
      try { 
       URL url = new URL("http://www.androidpit.com/feed/main.xml"); 
       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       in = conn.getInputStream(); 
       ByteArrayOutputStream out = new ByteArrayOutputStream(); 
       byte[] buffer = new byte[1024]; 
       for (int count; (count = in.read(buffer)) != -1;) { 
        out.write(buffer, 0, count); 
       } 
       byte[] response = out.toByteArray(); 
       rssFeed = new String(response, "UTF-8"); 
      } finally { 
       if (in != null) { 
        in.close(); 
       } 
      } 
      return rssFeed; 
     } 

     private class GetAndroidPitRssFeedTask extends AsyncTask<Void, Void, List<String>> { 

      @Override 
      protected List<String> doInBackground(Void... voids) { 
       List<String> result = null; 
       try { 
        String feed = getAndroidPitRssFeed(); 
        result = parse(feed); 
       } catch (XmlPullParserException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       return result; 
      } 

      private List<String> parse(String rssFeed) throws XmlPullParserException, IOException { 
       XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
       XmlPullParser xpp = factory.newPullParser(); 
       xpp.setInput(new StringReader(rssFeed)); 
       xpp.nextTag(); 
       return readRss(xpp); 
      } 

      private List<String> readRss(XmlPullParser parser) 
        throws XmlPullParserException, IOException { 
       List<String> items = new ArrayList<>(); 
       parser.require(XmlPullParser.START_TAG, null, "rss"); 
       while (parser.next() != XmlPullParser.END_TAG) { 
        if (parser.getEventType() != XmlPullParser.START_TAG) { 
         continue; 
        } 
        String name = parser.getName(); 
        if (name.equals("channel")) { 
         items.addAll(readChannel(parser)); 
        } else { 
         skip(parser); 
        } 
       } 
       return items; 
      } 

      private List<String> readChannel(XmlPullParser parser) 
        throws IOException, XmlPullParserException { 
       List<String> items = new ArrayList<>(); 
       parser.require(XmlPullParser.START_TAG, null, "channel"); 
       while (parser.next() != XmlPullParser.END_TAG) { 
        if (parser.getEventType() != XmlPullParser.START_TAG) { 
         continue; 
        } 
        String name = parser.getName(); 
        if (name.equals("item")) { 
         items.add(readItem(parser)); 
        } else { 
         skip(parser); 
        } 
       } 
       return items; 
      } 

      private String readItem(XmlPullParser parser) throws XmlPullParserException, IOException { 
       String result = null; 
       parser.require(XmlPullParser.START_TAG, null, "item"); 
       while (parser.next() != XmlPullParser.END_TAG) { 
        if (parser.getEventType() != XmlPullParser.START_TAG) { 
         continue; 
        } 
        String name = parser.getName(); 
        if (name.equals("title")) { 
         result = readTitle(parser); 
        } else { 
         skip(parser); 
        } 
       } 
       return result; 
      } 

      // Processes title tags in the feed. 
      private String readTitle(XmlPullParser parser) 
        throws IOException, XmlPullParserException { 
       parser.require(XmlPullParser.START_TAG, null, "title"); 
       String title = readText(parser); 
       parser.require(XmlPullParser.END_TAG, null, "title"); 
       return title; 
      } 

      private String readText(XmlPullParser parser) 
        throws IOException, XmlPullParserException { 
       String result = ""; 
       if (parser.next() == XmlPullParser.TEXT) { 
        result = parser.getText(); 
        parser.nextTag(); 
       } 
       return result; 
      } 

      private void skip(XmlPullParser parser) throws XmlPullParserException, IOException { 
       if (parser.getEventType() != XmlPullParser.START_TAG) { 
        throw new IllegalStateException(); 
       } 
       int depth = 1; 
       while (depth != 0) { 
        switch (parser.next()) { 
         case XmlPullParser.END_TAG: 
          depth--; 
          break; 
         case XmlPullParser.START_TAG: 
          depth++; 
          break; 
        } 
       } 
      } 

      @Override 
      protected void onPostExecute(List<String> rssFeed) { 
       if (rssFeed != null) { 
        setListAdapter(new ArrayAdapter<>(
          getActivity(), 
          android.R.layout.simple_list_item_1, 
          android.R.id.text1, 
          rssFeed)); 
       } 
      } 
     } 
    } 
} 

XML-Datei der Aktivität, die Abstürze:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     tools:context="com.realliferpgadac.thomas.adacapp.Feed"> 
     <ScrollView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="New Text" 
      android:id="@+id/tvFeed" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 
     </ScrollView> 
</RelativeLayout> 

Wo ist das Problem und wie kann ich es lösen?

Ich hoffe, Sie können mir helfen.

Danke,

emt

+3

'Classcast: android.widget.TextView kann nicht auf android.view.ViewGroup' gegossen werden –

+0

Sie am Ausgang von logcat aussehen sollte, wie es Ihnen sagen, warum die App abstürzt. – Barry

+0

verursacht durch: java.lang.ClassCastException: android.widget.TextView kann nicht in android.view.ViewGroup umgewandelt werden ... es als Textview werfen und versuchen –

Antwort

0

R.id.tvFeed Ersetzen mit Framelayout ids oder Standard-ID android.R.id.content.

if (savedInstanceState == null) { 
      getFragmentManager().beginTransaction() 
        .add(android.R.id.content, new PlaceholderFragment()) 
        .commit(); 
     } 

und entfernen Sie den Code aus der onOptionsItemSelected() -Methode.

if (id == R.id.tvFeed) { 
      return true; 
     } 
Verwandte Themen