2016-05-14 7 views
-2

を取得しています。このコードは、picassoを使用してサーバーから画像をダウンロードするために書いてあります。以下はImageAdapter.javaです:私はE/AndroidRuntime:FATAL例外:メイン

import com.squareup.picasso.Picasso; 
import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 
    int imageTotal = 7; 
    public static String[] mThumbIds = { 
      "http://imageshack.com/a/img923/2796/PB1lxo.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(480, 480)); 
      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; 
    } 
} 

とここでの主な活動のために呼び出さThirdActivityです:

ここ
import android.app.Activity; 
import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.GridView; 

public class ThirdActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.setContentView(R.layout.gridview_layout); 
     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.javaである(それは画像を表示するユーザーは、フルスクリーンでのクリック) :

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.widget.ImageView; 
import java.io.InputStream; 

public class FullImageActivity extends Activity { 

    ProgressDialog pDialog; 
    ImageView img; 
    Bitmap bitmap; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fullimageviewer); 

     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); 
     } 
    } 
} 

これはログオフです。このアクティビティを開こうとすると、アプリケーションがクラッシュします。私はこれで非常に新しいと私は何をすべきか理解しているようだ。任意のヘルプはappreciated.Logcatです:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.wildersdevelopment.insoletoprototype, PID: 3244 
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 
    at com.wildersdevelopment.insoletoprototype.ImageAdapter.getItem(ImageAdapter.java:31) 
    at com.wildersdevelopment.insoletoprototype.ImageAdapter.getView(ImageAdapter.java:48) 
    at android.widget.AbsListView.obtainView(AbsListView.java:2346) 
    at android.widget.GridView.makeAndAddView(GridView.java:1439) 
    at android.widget.GridView.makeRow(GridView.java:366) 
    at android.widget.GridView.fillDown(GridView.java:307) 
    at android.widget.GridView.fillFromTop(GridView.java:442) 
    at android.widget.GridView.layoutChildren(GridView.java:1282) 
    at android.widget.AbsListView.onLayout(AbsListView.java:2148) 
    at android.view.View.layout(View.java:16630) 
    at android.view.ViewGroup.layout(ViewGroup.java:5437) 
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:273) 
    at android.view.View.layout(View.java:16630) 
    at android.view.ViewGroup.layout(ViewGroup.java:5437) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) 
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) 
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) 
    at android.view.View.layout(View.java:16630) 
    at android.view.ViewGroup.layout(ViewGroup.java:5437) 
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:273) 
    at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678) 
    at android.view.View.layout(View.java:16630) 
    at android.view.ViewGroup.layout(ViewGroup.java:5437) 
    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171) 
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1931) 
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) 
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
    at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
    at android.view.Choreographer.doFrame(Choreographer.java:606) 
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

答えて

1

あなたは、アレイ内の1つのイメージのみに宣言:

public static String[] mThumbIds = { 
     "http://imageshack.com/a/img923/2796/PB1lxo.jpg" 
}; 

をしかし、あなたはあなたの総画像数は7であることを述べた:

int imageTotal = 7; 

getItem 2番目の要素(index = 1)を取得しようとすると、インデックスが配列に存在しないため例外が発生します。

imageTotal = 1を設定するか、文字列配列に7つの文字列を定義します。

代わりにあなたがあなた同様にgetCountをCanChangeメソッド:

public int getCount() { 
    return mThumbIds.length; 
} 
+0

はあなたにとても便利であることのために先生に感謝します。もし私が尋ねることができたら、これらのイメージをデータベースから取り出そうとすれば、どうすればいいですか?アプリを公開しても、画像を追加していくうちに画像が自動的にダウンロードされるようになっていますか? – Bembis668

+0

@ Bembis668データベースで作業したい場合は、コードを再設計する必要のあるCursorLoaderを使用してください – Pooya

+0

どうしますか? – Bembis668

関連する問題