2017-02-08 38 views
-1

應用程序崩潰行中的空指針異常int position = i.getExtras()。getInt(「id」);可能是什麼問題?請告訴我 !getExtras空指針異常

我建立在教程http://seegatesite.com/android-tutorial-display-image-to-android-gridview-from-url-using-picasso

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final GridView gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setAdapter(new ImageAdapter(this)); 
     gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
       Intent i = new Intent(getApplicationContext(), FullImageActivity.class); 
       i.putExtra("id", position); 
       startActivity(i); 

FullImageActivity

public class FullImageActivity extends Activity { 

ImageView img; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fullimageview); 



     Intent i = getIntent(); 

    int position = i.getExtras().getInt("id"); 
    ImageAdapter imageAdapter = new ImageAdapter(this); 

    img = (ImageView) findViewById(R.id.image); 
    String url = imageAdapter.getItem(position); 

    new DownloadImage().execute(url); 
} 
private class DownloadImage extends AsyncTask<String, Void, Bitmap> { 

    @Override 
    protected Bitmap doInBackground(String... URL) { 
     String imageURL = URL[0]; 
     Bitmap bitmap = null; 
     try { 
      InputStream input = new java.net.URL(imageURL).openStream(); 
      bitmap = BitmapFactory.decodeStream(input); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return bitmap; 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     img.setImageBitmap(result); 
    } 
} 

ImageAdapter

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 
    int imageTotal = 7; 
    public static String[] mThumbIds = { 
      "http://i.imgur.com/KzQO.jpg", 
      "http://i.imgur.com/87KE.jpg", 
      "http://i.imgur.com/HeJ.jpg", 
      "http://i.imgur.com/3d3.jpg", 
      "http://i.imgur.com/WLi.jpg", 
      "http://i.imgur.com/Pp.jpg", 
      "http://i.imgur.com/Ldt.jpg", 
    }; 

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

    public int getCount() { 
     return imageTotal; 
    } 

    @Override 
    public String getItem(int position) { 
     return mThumbIds[position]; 
    } 

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

    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(220, 220)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(8, 8, 8, 8); 
     } else { 
      imageView = (ImageView) convertView; 
     } 
     String url = getItem(position); 
     Picasso.with(mContext) 
       .load(url) 
       .placeholder(R.drawable.loader) 
       .fit() 
       .centerCrop().into(imageView); 
     return imageView; 
    } 
} 

個錯誤

java.lang.RuntimeException: Unable to start activity ComponentInfo{123.myapplication/123.myapplication.FullImageActivity}: java.lang.NullPointerException 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349) 
at android.app.ActivityThread.access$700(ActivityThread.java:159) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:176) 
at android.app.ActivityThread.main(ActivityThread.java:5419) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
at 123.myapplication.FullImageActivity.onCreate(FullImageActivity.java:30) 
at android.app.Activity.performCreate(Activity.java:5372) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)  
at android.app.ActivityThread.access$700(ActivityThread.java:159)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)  
at android.os.Handler.dispatchMessage(Handler.java:99)  
at android.os.Looper.loop(Looper.java:176)  
at android.app.ActivityThread.main(ActivityThread.java:5419)  
at java.lang.reflect.Method.invokeNative(Native Method)  
at java.lang.reflect.Method.invoke(Method.java:525)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)  
at dalvik.system.NativeStart.main(Native Method)  
+0

調試代碼,如果你能在getIntent先檢查您的活動或不 –

+0

@VivekMishra getIntent – V01ume

回答

1

試試下面的代碼:

替換:

Intent intent = new Intent(getApplicationContext(), FullImageActivity.class); 

有了這個:

Intent intent = new Intent(MainActivity.this, FullImageActivity.class); 

然後:

Intent i = getIntent(); 
Bundle extras = i.getExtras(); 
int position = extras.getInt("id"); 
+0

不能解析方法getExtras 變 '附加' 從未使用過 – V01ume

+0

NPE - INT位置= extras.getInt( 「ID」); – V01ume

+0

我建立在教程http://seegatesite.com/android-tutorial-display-image-to-android-gridview-from-url-using-picasso/#comment-4292 – V01ume

0

使用這樣的:

Bundle bundle = getIntent().getExtras(); 
int position = bundle.getInt("id"); 
+0

java.lang.NullPointerException int position = bundle.getInt(「id」); – V01ume

0

無論哪種方法getIntent()返回null,或i.getExtras()返回null。嘗試調試它,看看它是哪一個。然後嘗試找出它爲什麼返回null並修復它,或者在適當的情況下檢查null。

0

你應該把它作爲getIntExtra()

int position = getIntent().getIntExtra("id",1); 

沒有得到混淆關於「1」,它的默認值

+0

如果我寫這麼能夠顯示全圖像的一個圖像,沒有GridView – V01ume

+0

嘗試使用staggeredgridview – Sasi

+0

我不知道,我建立在教程http://seegatesite.com/android-tutorial-display-image-to-android -gridview-from-url-using-picasso – V01ume