2016-07-07 8 views
-6

私のAndroidアプリに問題があります。ボタンを押して新しいアクティビティに移動すると、常にクラッシュします。アクティビティを切り替えてAndroidアプリがクラッシュする

エラー:クラッシュ活動の

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) 

ソースコード:(これは、RSSフィードでなければなりません)

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ファイル:

<?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> 

問題はどこにあり、どのように解決できますか?

私があなたを助けてくれることを願っています。

は、

EMT

+3

'にClassCastException:android.widget.TextViewが、それはアプリがクラッシュされている理由を教えてくれますようあなたは、logcatの出力を見てみなければならない –

+0

android.view.ViewGroup'にキャストすることはできません。 – Barry

+0

原因:java.lang.ClassCastException:android.widget.TextViewをandroid.view.ViewGroupにキャストできません... Textviewとしてキャストして試してみてください。 –

答えて

0

をいただき、ありがとうございますでframeLayoutのIDまたはデフォルトのID android.R.id.contentR.id.tvFeedを交換してください。

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

このコードをonOptionsItemSelected()メソッドから削除します。

if (id == R.id.tvFeed) { 
      return true; 
     } 
関連する問題