2012-10-24 97 views
3

我已經搜索了很多帖子,並且找不到我的錯誤。我試圖讓一個示例RSS提要閱讀器瞭解它是如何工作的。如果有人有更好的例子,請隨時鏈接。感謝您的時間。 logcat的:。奇怪的例外

10-24 16:06:47.360: I/ActivityManager(91): Start proccom.example.example.android.Rssfeed for activity com.example.example.android.Rssfeed/.MainActivity: pid=544 uid=10041 gids={3003}   
10-24 16:06:47.390: I/WindowManager(91): createSurface Window{413cf2f8 Starting com.example.example.android.Rssfeed paused=false}: DRAW NOW PENDING 
10-24 16:06:47.551: W/NetworkManagementSocketTagger(91): setKernelCountSet(10041, 1) failed with errno -2 
10-24 16:06:48.370: I/WindowManager(91): createSurface Window{4163f540 com.example.example.android.Rssfeed/com.example.example.android.Rssfeed.MainActivity paused=false}: DRAW NOW PENDING 
10-24 16:06:48.450: D/gralloc_goldfish(544): Emulator without GPU emulation detected. 
10-24 16:06:48.520: I/ActivityManager(91): Displayed com.example.example.android.Rssfeed/.MainActivity: +1s257ms 
10-24 16:06:48.940: W/InputManagerService(91): Starting input on non-focused client [email protected] (uid=10009 pid=352) 
10-24 16:06:48.980: D/dalvikvm(186): GC_CONCURRENT freed 64K, 15% free 13713K/16071K, paused 33ms+15ms 
10-24 16:06:49.079: W/NetworkManagementSocketTagger(91): setKernelCountSet(10009, 0) failed with errno -2 
10-24 16:06:49.929: D/dalvikvm(186): GC_FOR_ALLOC freed 1375K, 16% free 13617K/16071K, paused 54ms 
10-24 16:06:50.049: D/dalvikvm(186): GC_CONCURRENT freed 647K, 19% free 13061K/16071K, paused 5ms+11ms 
10-24 16:06:50.439: D/AndroidRuntime(544): Shutting down VM 
10-24 16:06:50.439: W/dalvikvm(544): threadid=1: thread exiting with uncaught exception (group=0x409961f8) 
10-24 16:06:50.459: E/AndroidRuntime(544): FATAL EXCEPTION: main 
10-24 16:06:50.459: E/AndroidRuntime(544): java.lang.IllegalStateException: Could not find a method parseRss(View) in the activity class com.example.example.android.Rssfeed.MainActivity for onClick handler on view class android.widget.Button with id 'readRss' 
10-24 16:06:50.459: E/AndroidRuntime(544): at android.view.View$1.onClick(View.java:3026) 
10-24 16:06:50.459: E/AndroidRuntime(544): at android.view.View.performClick(View.java:3480) 
10-24 16:06:50.459: E/AndroidRuntime(544): at android.view.View$PerformClick.run(View.java:13983) 
10-24 16:06:50.459: E/AndroidRuntime(544): at android.os.Handler.handleCallback(Handler.java:605) 
10-24 16:06:50.459: E/AndroidRuntime(544): at android.os.Handler.dispatchMessage(Handler.java:92) 
10-24 16:06:50.459: E/AndroidRuntime(544): at android.os.Looper.loop(Looper.java:137) 
10-24 16:06:50.459: E/AndroidRuntime(544): at android.app.ActivityThread.main(ActivityThread.java:4340) 
10-24 16:06:50.459: E/AndroidRuntime(544): at java.lang.reflect.Method.invokeNative(Native Method) 
10-24 16:06:50.459: E/AndroidRuntime(544): at java.lang.reflect.Method.invoke(Method.java:511) 
10-24 16:06:50.459: E/AndroidRuntime(544): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
10-24 16:06:50.459: E/AndroidRuntime(544): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
10-24 16:06:50.459: E/AndroidRuntime(544): at dalvik.system.NativeStart.main(Native Method) 
10-24 16:06:50.459: E/AndroidRuntime(544): Caused by: java.lang.NoSuchMethodException: parseRss [class android.view.View] 
10-24 16:06:50.459: E/AndroidRuntime(544): at java.lang.Class.getConstructorOrMethod(Class.java:460) 
10-24 16:06:50.459: E/AndroidRuntime(544): at java.lang.Class.getMethod(Class.java:915) 
10-24 16:06:50.459: E/AndroidRuntime(544): at android.view.View$1.onClick(View.java:3019) 
10-24 16:06:50.459: E/AndroidRuntime(544): ... 11 more 
10-24 16:06:50.501: W/ActivityManager(91): Force finishing activity com.example.example.android.Rssfeed/.MainActivity 
10-24 16:06:50.519: W/WindowManager(91): Failure taking screenshot for (180x300) to layer 21015 
10-24 16:06:50.639: I/WindowManager(91): createSurface Window{415c26e8 paused=false}: DRAW NOW PENDING 
10-24 16:06:50.889: I/ARMAssembler(36): generated scanline__00000077:03515104_00008001_00000000 [113 ipp] (134 ins) at [0x41c99450:0x41c99668] in 797599 ns 
10-24 16:06:51.033: W/ActivityManager(91): Activity pause timeout for ActivityRecord{414aae20 com.example.example.android.Rssfeed/.MainActivity} 
10-24 16:06:51.059: W/NetworkManagementSocketTagger(91): setKernelCountSet(10009, 1) failed with errno -2 
10-24 16:06:51.129: D/AccountManagerService(91): bind attempt failed for Session: expectLaunch true, connected false, stats (0/0/0), lifetime 0.001, addAccount, accountType com.google, requiredFeatures null 
10-24 16:06:51.159: I/WindowManager(91): createSurface Window{414b2ff0 com.android.contacts/com.android.contacts.activities.PeopleActivity paused=false}: DRAW NOW PENDING 
10-24 16:06:51.219: E/AccountPromptUtils(352): Account setup error: Authenticator experienced an I/O problem 
10-24 16:06:51.879: W/NetworkManagementSocketTagger(91): setKernelCountSet(10041, 0) failed with errno -2 
10-24 16:06:51.879: I/dalvikvm(91): Jit: resizing JitTable from 4096 to 8192 
10-24 16:06:53.709: I/Process(544): Sending signal. PID: 544 SIG: 9 
10-24 16:06:54.029: I/ActivityManager(91): Process com.example.example.android.Rssfeed (pid 544) has died. 
10-24 16:06:54.029: I/WindowManager(91): WIN DEATH: Window{4163f540 com.example.example.android.Rssfeed/com.example.example.android.Rssfeed.MainActivity paused=false} 
10-24 16:07:01.924: W/ActivityManager(91): Activity destroy timeout for ActivityRecord{414aae20 com.example.example.android.Rssfeed/.MainActivity} 
10-24 16:07:18.002: D/ExchangeService(438): Received deviceId from Email app: androidc259148960 
10-24 16:07:18.002: D/ExchangeService(438): Reconciling accounts... 
10-24 16:07:30.529: W/ThrottleService(91): unable to find stats for iface rmnet0 
10-24 16:09:00.190: D/dalvikvm(91): GC_CONCURRENT freed 480K, 9% free 12125K/13319K, paused 6ms+10ms 
10-24 16:11:40.999: D/dalvikvm(171): GC_CONCURRENT freed 456K, 6% free 10349K/10951K, paused 5ms+5ms 
10-24 16:17:30.540: W/ThrottleService(91): unable to find stats for iface rmnet0: E/(): Device disconnected 

實際代碼

package com.example.example.android.Rssfeed; 

import java.util.List; 

import android.annotation.SuppressLint; 
import android.app.ListActivity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class ReadRssFeed extends ListActivity { 
    private ParseTask parseTask; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     // StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 
     // .detectAll().penaltyLog().penaltyDeath().build()); 
     // StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll() 
     // .penaltyLog().penaltyDeath().build()); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     parseTask = (ParseTask) getLastNonConfigurationInstance(); 
     if (parseTask != null) { 
      parseTask.setActivity(this); 
     } 
     ArrayAdapter<RssItem> adapter = new ArrayAdapter<RssItem>(this, 
       R.layout.rowlayout, android.R.id.text1, RssAplication.list); 
     RssAplication application = (RssAplication) getApplication(); 
     setListAdapter(adapter); 
    } 

    public void parseRss(View view) { 
     Log.e("DEBUG", "parseRss"); 
     if (parseTask == null) { 
      parseTask = new ParseTask(this); 
      parseTask 
        .execute(new String[] { "http://www.beaufortcountynow.com/rss.php" }); 
     } 

    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     Toast.makeText(this, "Clicked", Toast.LENGTH_LONG).show(); 
    } 

    private static class ParseTask extends 
      AsyncTask<String, Void, List<RssItem>> { 
     private ReadRssFeed activity; 

     private ParseTask(ReadRssFeed activity) { 
      setActivity(activity); 
     } 

     public void setActivity(ReadRssFeed activity) { 
      this.activity = activity; 
      Log.d("DEBUG", "ParseTask's activity: " + activity); 
     } 

     @Override 
     protected List<RssItem> doInBackground(String... params) { 
      Log.d("DEBUG", "doInBackground"); 
      return FeedReader.parse(params[0], activity); 
     } 

     @Override 
     protected void onPostExecute(List<RssItem> list) { 
      Log.w("DEBUG", "onPostExecute called"); 
      finishWithText(list); 
     } 

     @SuppressLint("NewApi") 
     private void finishWithText(List<RssItem> list) { 
      String text = String.valueOf(list.size()); 
      Log.d("DEBUG", "ParseTask done. Updating activity: " + activity 
        + ", message: " + text); 
      if (activity != null) { 
       activity.parseTask = null; 

       TextView textView = (TextView) activity 
         .findViewById(R.id.textViewCount); 
       textView.setText(text); 
       @SuppressWarnings("unchecked") 
       ArrayAdapter<RssItem> adapter = (ArrayAdapter<RssItem>) activity 
         .getListAdapter(); 
       adapter.clear(); 
       adapter.addAll(list); 
       RssAplication.list = list; 
      } 
     } 
    } 

    @Override 
    public Object onRetainNonConfigurationInstance() { 
     if (parseTask != null) { 
      return parseTask; 
     } 
     return super.onRetainNonConfigurationInstance(); 
    } 

    @Override 
    protected void onDestroy() { 
     if (parseTask != null) { 
      parseTask.setActivity(null); 
     } 
     super.onDestroy(); 
    } 
} 

有幾個.java文件,但是這是引發錯誤,隨着

package com.example.example.android.Rssfeed; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 

public class MainActivity extends Activity { 

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

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

好了的人,做了數3,如建議。新錯誤,發佈代碼和日誌貓。非常感謝您的快速響應!

package com.example.example.android.Rssfeed; 

    import java.util.List; 

import android.annotation.SuppressLint; 
import android.app.ListActivity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends ListActivity { 

private ParseTask parseTask; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    // StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 
    // .detectAll().penaltyLog().penaltyDeath().build()); 
    // StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll() 
    // .penaltyLog().penaltyDeath().build()); 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    parseTask = (ParseTask) getLastNonConfigurationInstance(); 
    if (parseTask != null) { 
     parseTask.setActivity(this); 
    } 
    ArrayAdapter<RssItem> adapter = new ArrayAdapter<RssItem>(this, 
      R.layout.rowlayout, android.R.id.text1,    RssAplication.list); 
    RssAplication application = (RssAplication) getApplication(); 
    setListAdapter(adapter); 
} 

public void parseRss(View view) { 
    Log.e("DEBUG", "parseRss"); 
    if (parseTask == null) { 
     parseTask = new ParseTask(this); 
     parseTask 
       .execute(new String[] { "http://www.beaufortcountynow.com/rss.php" }); 
    } 

} 

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    Toast.makeText(this, "Clicked", Toast.LENGTH_LONG).show(); 
} 

private static class ParseTask extends 
     AsyncTask<String, Void, List<RssItem>> { 
    private MainActivity activity; 

    private ParseTask(MainActivity activity) { 
     setActivity(activity); 
    } 

    public void setActivity(MainActivity activity) { 
     this.activity = activity; 
     Log.d("DEBUG", "ParseTask's activity: " + activity); 
    } 

    @Override 
    protected List<RssItem> doInBackground(String... params) { 
     Log.d("DEBUG", "doInBackground"); 
     return FeedReader.parse(params[0], activity); 
    } 

    @Override 
    protected void onPostExecute(List<RssItem> list) { 
     Log.w("DEBUG", "onPostExecute called"); 
     finishWithText(list); 
    } 

    @SuppressLint("NewApi") 
    private void finishWithText(List<RssItem> list) { 
     String text = String.valueOf(list.size()); 
     Log.d("DEBUG", "ParseTask done. Updating activity: " + activity 
       + ", message: " + text); 
     if (activity != null) { 
      activity.parseTask = null; 

      TextView textView = (TextView) activity 
        .findViewById(R.id.textViewCount); 
      textView.setText(text); 
      @SuppressWarnings("unchecked") 
      ArrayAdapter<RssItem> adapter = (ArrayAdapter<RssItem>) activity 
        .getListAdapter(); 
      adapter.clear(); 
      adapter.addAll(list); 
      RssAplication.list = list; 
     } 
    } 
} 

@Override 
public Object onRetainNonConfigurationInstance() { 
    if (parseTask != null) { 
     return parseTask; 
    } 
    return super.onRetainNonConfigurationInstance(); 
} 

@Override 
protected void onDestroy() { 
    if (parseTask != null) { 
     parseTask.setActivity(null); 
    } 
    super.onDestroy(); 
} 
    } 

的logcat:

10-26 12:53:26.224: D/dalvikvm(539): Not late-enabling CheckJNI (already on) 
10-26 12:53:27.254: D/AndroidRuntime(539): Shutting down VM 
10-26 12:53:27.264: W/dalvikvm(539): threadid=1: thread exiting with uncaught exception (group=0x409961f8) 
10-26 12:53:27.274: E/AndroidRuntime(539): FATAL EXCEPTION: main 
10-26 12:53:27.274: E/AndroidRuntime(539): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.example.android.Rssfeed/com.example.example.android.Rssfeed.MainActivity}: java.lang.ClassCastException: android.app.Application cannot be cast to com.example.example.android.Rssfeed.RssAplication 
10-26 12:53:27.274: E/AndroidRuntime(539):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 
    10-26 12:53:27.274: E/AndroidRuntime(539): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
10-26 12:53:27.274: E/AndroidRuntime(539):  at android.app.ActivityThread.access$600(ActivityThread.java:122) 
10-26 12:53:27.274: E/AndroidRuntime(539):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
10-26 12:53:27.274: E/AndroidRuntime(539):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-26 12:53:27.274: E/AndroidRuntime(539):  at android.os.Looper.loop(Looper.java:137) 
10-26 12:53:27.274: E/AndroidRuntime(539):  at android.app.ActivityThread.main(ActivityThread.java:4340) 
10-26 12:53:27.274: E/AndroidRuntime(539):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-26 12:53:27.274: E/AndroidRuntime(539):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-26 12:53:27.274: E/AndroidRuntime(539):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
10-26 12:53:27.274: E/AndroidRuntime(539):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
10-26 12:53:27.274: E/AndroidRuntime(539):  at dalvik.system.NativeStart.main(Native Method) 
10-26 12:53:27.274: E/AndroidRuntime(539): Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.example.example.android.Rssfeed.RssAplication 
10-26 12:53:27.274: E/AndroidRuntime(539):  at com.example.example.android.Rssfeed.MainActivity.onCreate(MainActivity.java:36) 
10-26 12:53:27.274: E/AndroidRuntime(539):  at android.app.Activity.performCreate(Activity.java:4465) 
10-26 12:53:27.274: E/AndroidRuntime(539):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
    10-26 12:53:27.274: E/AndroidRuntime(539): at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 
10-26 12:53:27.274: E/AndroidRuntime(539):  ... 11 more 
10-26 12:58:27.543: I/Process(539): Sending signal. PID: 539 SIG: 9 

回答

2

從這個logcat的最重要的信息是:

java.lang.IllegalStateException: Could not find a method parseRss(View) 
    in the activity class com.example.example.android.Rssfeed.MainActivity 
    for onClick handler on view class android.widget.Button with id 'readRss' 

說明

MainActivity找不到方法parseRss(),因爲它是在ReadRssFeed類。

您將同樣的佈局傳遞給這兩個活動,這有點令人困惑......但是在activity_main.xml內部,您使用屬性android:onClick="parseRss"android:onClick要求提供的名稱與顯示佈局的活動中的方法相關。正如我之前所說的MainActivity沒有parseRss(),因此錯誤。

可能的解決方案

  1. 創建兩個佈局,一個特定MainActivity(不android:onClick="parseRss")和另一ReadRssFeed或者
  2. 添加parseRss()MainActivity在某種程度上,形狀或形式或者
  3. 由於MainActivity目前什麼都不做,你可以刪除它並重新命名ReadRssFeedMainActivity ...

讀一logcat的

比而讀取每個logcat的爲您和引導您一步一步到正在運行的應用程序(這不是目的)我會教你如何閱讀大部分的logcats,這樣你就可以自己解決許多這些問題。

  1. 找到最低的「由......引起......「

    10-26 12:53:27.274: E/AndroidRuntime(539): Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.example.example.android.Rssfeed.RssAplication 
    

    這大致意味着你正在試圖將對象強制轉換到的東西,它不能成爲我們保持我們的眼睛了代碼的應用程序對象的工作。

  2. 工作下來logcat的,線 - 通過線,直到你從你的類之一遇到的代碼。(這是第一行。)

    10-26 12:53:27.274: E/AndroidRuntime(539):  at com.example.example.android.Rssfeed.MainActivity.onCreate(MainActivity.java:36) 
    

    這告訴你的包,類和方法,其中的代碼失敗了。最有用的部分是結束MainActivity.java:36,這個號碼是e發生錯誤的xact行號。

  3. 轉到在MainActivity到線路36(使用Ctrl鍵 + 在Eclipse大號)。這條線是罪魁禍首:

    RssAplication application = (RssAplication) getApplication(); 
    

    但是,這是我的用處停止。你還沒有發佈你的RssAplication類,所以我看不到發生了什麼。我的第一個問題是:RssAplication是否擴展了應用程序?


如果答案解決您原來的問題,請點擊選中標記。此外,點擊任何您認爲有用的答案上的向上箭頭也很不錯。

如果您遇到任何您無法解決的問題,請提出一個新問題。祝你好運!

+0

編輯新錯誤,感謝您的快速響應。 – Gramgax