2011-04-29 74 views
0

嗨現在試圖創建文件夾在我的畫廊....通常我的網格視圖單獨顯示圖像,但我需要在我的畫廊文件夾。所以,我正在使用文件類....如果我運行我的項目日誌貓指示錯誤如何解決這些錯誤?請檢查我的編碼也.....如何解決日誌貓錯誤?項目ImageViewExample

ImageViewExample.java

package ImageViewExample.ImageViewExample; 

import java.io.File; 
import android.R.string; 
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.BaseAdapter; 
import android.widget.Gallery; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.AdapterView.OnItemClickListener; 

public class ImageViewExample extends Activity { 
    /** Called when the activity is first created. */ 
    private Cursor imagecursor, actualimagecursor; 
    private int image_column_index, actual_image_column_index; 
    GridView imagegrid; 
    private int count; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     init_phone_image_grid(); 
} 
private void init_phone_image_grid() { 
     String[] img = { MediaStore.Images.Thumbnails._ID }; 
     imagecursor = managedQuery(
     MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, img, null, 
     null, MediaStore.Images.Thumbnails.IMAGE_ID + ""); 
     image_column_index = imagecursor 
    .getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID); 
     count = imagecursor.getCount(); 
     imagegrid = (GridView) findViewById(R.id.PhoneImageGrid); 
     imagegrid.setAdapter(new ImAdapterh(this)); 
     imagegrid.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView parent, View v, 
     int position, long id) { 
        System.gc(); 
        String[] proj = { MediaStore.Images.Media.DATA }; 
        actualimagecursor = managedQuery(
     MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj, 
     null, null, null); 
        actual_image_column_index = actualimagecursor 
    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
        actualimagecursor.moveToPosition(position); 
        String i = actualimagecursor.getString(actual_image_column_index); 
        System.gc(); 
        Intent intent = new Intent(getApplicationContext(), ViewImage.class); 
        intent.putExtra("filename", i); 
        startActivity(intent); 
      } 
     }); 
     } 


     public class ImAdapterh extends BaseAdapter{ 

     File dir=new File(Environment.getExternalStorageDirectory(),"/myImages/"); 

     int count=dir.list().length; 

     String[] fileNames = dir.list(); 

     private Context mContext; 

     public ImAdapterh(Context c) { 
     mContext = c; 
     } 

    public int getCount() { 
     return count; 
    } 

    public Object getItem(int position) { 
     return null; 
    } 

    public long getItemId(int position) { 
     return 0; 
    } 

    // create a new ImageView for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView = null;   


    for(String bitmapFileName : fileNames) 
    { 
      if (convertView == null) 
      { // if it's not recycled, initialize some attributes 
       imageView = new ImageView(mContext); 
       imageView.setLayoutParams(new Gallery.LayoutParams(85, 85)); 
       imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
       imageView.setPadding(8, 8, 8, 8);     

       Bitmap bmp = BitmapFactory.decodeFile(dir.getPath() + "/" + 
       bitmapFileName); 
       System.out.println(dir); 
       imageView.setImageBitmap(bmp); 
      }else 
      { 
      imageView = (ImageView) convertView;    

      } 
    } 
     return imageView; 
     } 
     }} 

logcat的錯誤:

04-29 14:56:23.011: DEBUG/AndroidRuntime(415): >>>>>>>>>>>>>> AndroidRuntime START 
<<<<<<<<<<<<<< 
04-29 14:56:23.021: DEBUG/AndroidRuntime(415): CheckJNI is ON 
04-29 14:56:23.402: DEBUG/AndroidRuntime(415): --- registering native functions --- 
04-29 14:56:24.781: DEBUG/AndroidRuntime(415): Shutting down VM 
04-29 14:56:24.791: DEBUG/dalvikvm(415): Debugger has detached; object registry had 1 
entries 
04-29 14:56:24.821: INFO/AndroidRuntime(415): NOTE: attach of thread 'Binder Thread 
#3' failed 
04-29 14:56:25.761: DEBUG/AndroidRuntime(423): >>>>>>>>>>>>>> AndroidRuntime START 
<<<<<<<<<<<<<< 
04-29 14:56:25.761: DEBUG/AndroidRuntime(423): CheckJNI is ON 
04-29 14:56:26.141: DEBUG/AndroidRuntime(423): --- registering native functions --- 
04-29 14:56:27.552: INFO/ActivityManager(66): Starting activity: Intent { 
act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 
cmp=ImageViewExample.ImageViewExample/.ImageViewExample } 
04-29 14:56:28.182: DEBUG/AndroidRuntime(423): Shutting down VM 
04-29 14:56:28.232: DEBUG/dalvikvm(423): Debugger has detached; object registry had 1 
entries 
04-29 14:56:28.291: INFO/ActivityManager(66): Start proc 
ImageViewExample.ImageViewExample for activity 
ImageViewExample.ImageViewExample/.ImageViewExample: pid=430 uid=10050 gids={} 
04-29 14:56:28.312: INFO/AndroidRuntime(423): NOTE: attach of thread 'Binder Thread 
#3' failed 
04-29 14:56:29.641: DEBUG/AndroidRuntime(430): Shutting down VM 
04-29 14:56:29.641: WARN/dalvikvm(430): threadid=1: thread exiting with uncaught 
exception (group=0x4001d800) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430): FATAL EXCEPTION: main 
04-29 14:56:29.711: ERROR/AndroidRuntime(430): java.lang.RuntimeException: Unable to 
start activity 
ComponentInfo{ImageViewExample.ImageViewExample/ImageViewExample. 
ImageViewExample.ImageViewExample}: java.lang.NullPointerException 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
android.app.ActivityThread.access$2300(ActivityThread.java:125) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
android.os.Handler.dispatchMessage(Handler.java:99) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
android.os.Looper.loop(Looper.java:123) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
android.app.ActivityThread.main(ActivityThread.java:4627) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
java.lang.reflect.Method.invokeNative(Native Method) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
java.lang.reflect.Method.invoke(Method.java:521) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
dalvik.system.NativeStart.main(Native Method) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430): Caused by: 
java.lang.NullPointerException 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
ImageViewExample.ImageViewExample.ImageViewExample$ImAdapterh.<init> 
(ImageViewExample.java:73) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at  
ImageViewExample.ImageViewExample.ImageViewExample.init_phone_image_grid 
(ImageViewExample.java:47) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
ImageViewExample.ImageViewExample.ImageViewExample.onCreate 
(ImageViewExample.java:36) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at 
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  at  
android.app.ActivityThread.performLaunchActivity 
(ActivityThread.java:2627) 
04-29 14:56:29.711: ERROR/AndroidRuntime(430):  ... 11 more 
04-29 14:56:29.751: WARN/ActivityManager(66): Force finishing activity 
ImageViewExample.ImageViewExample/.ImageViewExample 
04-29 14:56:30.292: WARN/ActivityManager(66): Activity pause timeout for 
HistoryRecord{4406aab0 ImageViewExample.ImageViewExample/.ImageViewExample} 
04-29 14:56:36.701: DEBUG/dalvikvm(189): GC_EXPLICIT freed 162 objects/7136 bytes in 
121ms 
04-29 14:56:41.568: WARN/ActivityManager(66): Activity destroy timeout for 
HistoryRecord{4406aab0 ImageViewExample.ImageViewExample/.ImageViewExample} 

請幫我.....

回答

0

空指針異常的您的適配器類。

File dir=new File(Environment.getExternalStorageDirectory(),"/myImages/"); 

     int count=dir.list().length; 

     String[] fileNames = dir.list(); 

檢查上面的行......表示返回null的值。

2

問題是幾乎可以肯定這條線:

int count=dir.list().length; 

邏輯的,以證明它必須是該行是如下所述的鏈:

  • 創建可以在File對象語句t拋出異常ImAdapterh構造函數本身
  • 這意味着dir必須非空。
  • 這意味着dir.list()不會在ImAdapterh構造函數中拋出異常
  • 這只是引用了String[]引用以獲取length值作爲罪魁禍首。

最後,空指針可以通過事實來解釋File.list()返回null如果文件(在這種情況下dir)不存在或者不表示一個目錄......按照該File.list() javadoc