2017-04-16 15 views
0

初心者であり、このエラーが発生していますか? 私はアプリケーションを起動している間、私はストレージ許可を要求しますが、その後アプリケーションがクラッシュし、私にこのエラーが表示されます: - ヌル配列の長さを取得しようとしました。助けてください。nullの長さを取得しようとしていますfile.Length()の配列

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.techx.storysaver/com.techx.storysaver.MainActivity}: java.lang.NullPointerException: Attempt to get length of null array 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
     at android.app.ActivityThread.-wrap12(ActivityThread.java) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:154) 
     at android.app.ActivityThread.main(ActivityThread.java:6126) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
    Caused by: java.lang.NullPointerException: Attempt to get length of null array 
     at com.techx.storysaver.ImageAdapter.getCount(ImageAdapter.java:40) 
     at android.widget.GridView.setAdapter(GridView.java:206) 
     at com.techx.storysaver.ImageFragment.onCreateView(ImageFragment.java:53) 
     at android.support.v4.app.Fragment.performCreateView(Fragment.java:2189) 
     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) 
     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:757) 
     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2355) 
     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2146) 
     at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098) 
     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2008) 
     at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388) 
     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607) 
     at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178) 
     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1249) 
     at android.app.Activity.performStart(Activity.java:6696) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2628) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)  
     at android.app.ActivityThread.-wrap12(ActivityThread.java)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:154)  
     at android.app.ActivityThread.main(ActivityThread.java:6126)  
     at java.lang.reflect.Method.invoke(Native Method) 

これは、ここに私のImageAdapter

public class ImageAdapter extends BaseAdapter { 

    private Context context; 


    String path = Environment.getExternalStorageDirectory().toString()+"/Pictures/"; 
    File f = new File(path); 
    File file[] = f.listFiles(); 



    public ImageAdapter(Context c) 
    { 
     context = c; 
    } 


    @Override 
    public int getCount() { 

      return file.length;  //Line 40, Here i am gettin Error 

    } 

    @Override 
    public Object getItem(int position) { 
     return file[position]; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView = new ImageView(context); 
     Glide 
       .with(context) 
       .load(file[position]) 
       .into(imageView); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setLayoutParams(new GridView.LayoutParams(360,480)); 

     return imageView; 
    } 

} 

である私のイメージは、フラグメント

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    final View rootView = inflater.inflate(R.layout.image_fragment, container, false); 

    GridView gridView = (GridView)rootView.findViewById(R.id.grid_view); 
    gridView.setAdapter(new ImageAdapter(getActivity())); //Line 50, Here Also i am getting Error 



    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent i = new Intent(getActivity(),FullImageActivity.class); 
      i.putExtra("id",position); 
      startActivity(i); 
     } 
    }); 

    return rootView; 
} 
+0

の内部クラスの可能性が重複して呼び出されたときに[NullPointerExceptionがある、と私はそれをどのように修正すればよいか?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception - と - どのように私はそれを修正する) – csmckelvey

+0

@Bubletan、どのようにコードを整列させましたか、どのようなキーストロークを使用したのですか? – Remario

+0

@リマリオ何を意味するのですか?私はエディタを使いました。 – Bubletan

答えて

2
String path = Environment.getExternalStorageDirectory().toString()+"/Pictures/"; 
File f = new File(path); 
File file[] = f.listFiles(); 

file[]したがって、このステートメントは、nullであるreturn file.length;またはその変数に関係するその他のものは失敗します。また、例外処理を使用して、ファイルの存在を処理してください。例えばFileNotFoundのように。

また、ファイルへのハンドルを取得する代わりに、これを使用し、このString path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

String pic_path = String.format("%s/%s",path,specific_path); 

を試してみてください。その後、

File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); 

if(storageDir.exists()){File file[] = storageDir.listFiles();}

構文getExternalFilesDirを呼び出すための、それは文脈に依存します。あなたはYourActivity.this.getExternalFilesDir()

  • パラメータとしてコンテキスト を渡すクラスで

    1. getActivity断片
    2. context.getExternalFilesDir(中()getExternalFilesDir()); アクティビティ
    +0

    コメントは議論の対象外です。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/141904/discussion-on-answer-by-remario-attempt-to-get-length-of-null-array-of-ファイルleng)。 –

    関連する問題