2011-11-05 110 views
3

我花了很长时间尝试查找错误,但似乎无法找到可在线工作的答案。情况是,每当我点击列表中的一个选项时,LogCat就会产生这个错误:android.content.ActivityNotFoundException:无法找到显式的活动类。(Android)无法从同一个包中调用另一个活动

清单文件:

<?xml version="1.0" encoding="utf-8"?> 
<manifest package="com.capture.ProcessCapture" 
    android:versionCode="1" 
    android:versionName="1.0" xmlns:android="http://schemas.android.com/apk/res/android"> 

    <uses-sdk android:minSdkVersion="7" /><uses-permission android:name="android.permission.GET_TASKS"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
    <uses-permission android:name="android.permission.WAKE_LOCK"/> 
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name"> 
     <activity android:label="@string/app_name" android:name=".ProcessCaptureActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".FileData" android:label="@string/app_name"> 
     </activity> 
     <service android:name=".BackgroundCapture" android:enabled="true" android:process=":Background" android:permission="android.permission.WAKE_LOCK" android:label="@string/app_name"></service> 
     <receiver android:name=".BootReceiver" android:label="@string/app_name" android:enabled="true"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

ProcessCaptureActivity.java(主类):

package com.capture.ProcessCapture; 
... (all the imports) 

public class ProcessCaptureActivity extends ListActivity { 
    private File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/ProcessCapture/data"); 
    private String accessedFile; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     onResume(); 
     setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, capturedFiles())); 
     ListView lv = getListView(); 
     lv.setTextFilterEnabled(true); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
       // Get file name: 
       accessedFile = ((TextView) view).getText().toString(); 
       Intent newIntent = new Intent(view.getContext(), FileData.class); 
       newIntent.putExtra("filename", accessedFile); 
       startActivity(newIntent); 
      } 
      }); 
    } 

    public void onResume() { 
     super.onResume(); 
     //Timeout for 30min (Using AlarmManager) 
     Intent myIntent = new Intent(this, BackgroundCapture.class); 
     PendingIntent pendingIntent = PendingIntent.getService(this, 0, myIntent, 0); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
     alarmManager.cancel(pendingIntent); 
     alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 0, AlarmManager.INTERVAL_HALF_HOUR, pendingIntent); 
    } 

    private String[] capturedFiles() { 
     return dir.list(); 
    } 

} 

FileData.java

package com.capture.ProcessCapture; 

... (all the imports) 

public class FileData extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     File sdcard = Environment.getExternalStorageDirectory(); 

     Bundle bundle = this.getIntent().getExtras(); 
     String filename = bundle.getString("filename"); 
     File file = new File(sdcard+"/ProcessCapture/data", filename); 

     StringBuilder text = new StringBuilder(); 

     try { 
      BufferedReader br = new BufferedReader(new FileReader(file)); 
      String line; 

      while((line = br.readLine()) != null) { 
       text.append(line); 
       text.append('\n'); 
      } 
     } catch (IOException ioe) { 
      ioe.printStackTrace(); 
     } 

     TextView tv = (TextView) findViewById(R.id.file_data); 
     tv.setText(text); 

     setContentView(R.layout.file_data); 
    } 

} 

完全logcat的:(只显示出错误时,列表项目被点击)

11-05 10:45:28.743: E/AndroidRuntime(907): FATAL EXCEPTION: main 
11-05 10:45:28.743: E/AndroidRuntime(907): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.capture.ProcessCapture/com.capture.ProcessCapture.FileData}; have you declared this activity in your AndroidManifest.xml? 
11-05 10:45:28.743: E/AndroidRuntime(907): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1405) 
11-05 10:45:28.743: E/AndroidRuntime(907): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379) 
11-05 10:45:28.743: E/AndroidRuntime(907): at android.app.Activity.startActivityForResult(Activity.java:2827) 
11-05 10:45:28.743: E/AndroidRuntime(907): at android.app.Activity.startActivity(Activity.java:2933) 
11-05 10:45:28.743: E/AndroidRuntime(907): at com.capture.ProcessCapture.ProcessCaptureActivity$1.onItemClick(ProcessCaptureActivity.java:37) 
11-05 10:45:28.743: E/AndroidRuntime(907): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
11-05 10:45:28.743: E/AndroidRuntime(907): at android.widget.ListView.performItemClick(ListView.java:3513) 
11-05 10:45:28.743: E/AndroidRuntime(907): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812) 
11-05 10:45:28.743: E/AndroidRuntime(907): at android.os.Handler.handleCallback(Handler.java:587) 
11-05 10:45:28.743: E/AndroidRuntime(907): at android.os.Handler.dispatchMessage(Handler.java:92) 
11-05 10:45:28.743: E/AndroidRuntime(907): at android.os.Looper.loop(Looper.java:123) 
11-05 10:45:28.743: E/AndroidRuntime(907): at android.app.ActivityThread.main(ActivityThread.java:3683) 
11-05 10:45:28.743: E/AndroidRuntime(907): at java.lang.reflect.Method.invokeNative(Native Method) 
11-05 10:45:28.743: E/AndroidRuntime(907): at java.lang.reflect.Method.invoke(Method.java:507) 
11-05 10:45:28.743: E/AndroidRuntime(907): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
11-05 10:45:28.743: E/AndroidRuntime(907): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
11-05 10:45:28.743: E/AndroidRuntime(907): at dalvik.system.NativeStart.main(Native Method) 

在此先感谢!对不起,很长的问题=)

+1

“com.capture.ProcessCapture”包名都应该小写,你的代码看起来不错,以我除了从 – Optimus

+1

尝试更改完成名称AndroidManifest文件即“com.capture.ProcessCapture.FileData” – Optimus

+0

嗨,非常感谢您的快速响应。但是,这并没有解决问题=(非常感谢你的尝试,虽然! – pipng13579

回答

1

(从我上面的评论复制)当我使用ubuntu而不是windows = /时,问题“解决了”。根问题出现在FileData.java中,其中setContentView(R.layout.file_data)必须先调用将文本设置为TextView(电视)。

为FileData.java新的代码是:

package com.capture.ProcessCapture; 

... (all the imports) 

public class FileData extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     File sdcard = Environment.getExternalStorageDirectory(); 

     Bundle bundle = this.getIntent().getExtras(); 
     String filename = bundle.getString("filename"); 
     File file = new File(sdcard+"/ProcessCapture/data", filename); 

     StringBuilder text = new StringBuilder(); 

     try { 
      BufferedReader br = new BufferedReader(new FileReader(file)); 
      String line; 

      while((line = br.readLine()) != null) { 
       text.append(line); 
       text.append('\n'); 
      } 
     } catch (IOException ioe) { 
      ioe.printStackTrace(); 
     } 

     setContentView(R.layout.file_data); 

     TextView tv = (TextView) findViewById(R.id.file_data); 
     tv.setText(text); 
    } 

} 
0

请看看this question和第一个答案,它建议在试图启动活动的代码周围放置一个try/catch块,因为有时实际上并不是活动确实未申报但是另一个潜在问题。

如果这不起作用,您可以随时尝试清理和重建项目,然后让Eclipse重新同步(右键单击项目“Android工具” - >“修复项目属性”)。

+0

谢谢您的回复。但是,“修复项目属性”方法没有做任何可见的事情,并且堆栈跟踪指向代码的'startActivity(newIntent);'部分。然而,我仍然无法找到解决方案... '11-05 12:17:16.092:W/System.err(1251):android.content.ActivityNotFoundException:无法找到显式活动类{com .capture.ProcessCapture/com.capture.ProcessCapture.FileData};你有没有在你的AndroidManifest.xml中声明这个活动?' – pipng13579

+0

很高兴听到你已经摆脱了这个问题。 :-)有时候Eclipse会扭曲它,因此我建议尝试使用clean/build/sync方法。 –

相关问题