2011-07-22 22 views
3

のグリッドビューで画像をロード中に進行状況バーを表示する方法は、私はURLを打つと、そこからXMLファイルがあります。 xmlファイルには、さまざまな画像のURLが含まれています。私はこれらの値を解析し、配列リストに格納しています。そのリストから画像がグリッド表示されます。このプロセスが開始されると、Webサービスから画像をロードする際に黒い画面が表示されることがあります。その場合、私は進捗バーを表示したいと思います。続き私のアプリでは、アクティビティが開始されたときにアンドロイドアプリ

は私がクラッシュしたばかりプログレスバー

class Image extends AsyncTask<Void, Void, Void> 
{  
     ProgressDialog dialog = new ProgressDialog(ProfileImages.this); 

    protected void onPreExecute() 
    {  
     dialog.setMessage("Please wait..."); 
     dialog.setIndeterminate(true); 
     dialog.show(); 
    } 

     protected void onPostExecute(Void unused) 
    { 
        i.setImageBitmap(bm); 
     dialog.dismiss(); 
    } 

     @Override 
    protected Void doInBackground(Void... params) 
    { 
      parsing(); 
       grid.setAdapter(new ImageAdapter(this)); 
     return null; 
    } 
} 

しかし、私のアプリを表示するために私のコードです。解析関数はうまくいっていますが、到達すると

grid.setAdapter(new ImageAdapter(this)); 

public View getView(final int position, View convertView,ViewGroup parent) 
    { 
     ImageView i = new ImageView(this.myContext); 
     if (convertView == null) 
     { 
      i = new ImageView(myContext); 
      i.setLayoutParams(new GridView.LayoutParams(105, 105)); 
      i.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      i.setPadding(8, 8, 8, 8); 

      i.setOnClickListener(new View.OnClickListener() 
      { 
       public void onClick(View view) 
       { 

        dialog = new ProgressDialog(ProfileGridView.this); 
        dialog.setMessage("Please wait..."); 
        dialog.setIndeterminate(true); 
        dialog.show(); 
        new Thread() 
        { 
         public void run() 
         { 
          try 
          { 
           Thread.sleep(300); 
          } 
          catch (InterruptedException e) 
          { 
           e.printStackTrace(); 
          } 
          Bundle bundle = new Bundle(); 
          bundle.putInt("key1",position); 
          Appconstant.showLog("position clicked "+position); 

          Intent myIntent = new Intent(getBaseContext(),ProfileImages.class); 
          myIntent.putExtras(bundle); 
          startActivityForResult(myIntent, 0); 
          dialog.dismiss(); 
         } 
        }.start(); 
       } 
      }); 
     } 
     else 
     { 
      i = (ImageView) convertView; 
     } 

     try 
     { 
      URL aURL = new URL(myRemoteImages[position]); 
      Appconstant.showLog("Grid View URL " + aURL); 
      URLConnection conn = aURL.openConnection(); 
      conn.connect(); 
      InputStream is = conn.getInputStream(); 

      BufferedInputStream bis = new BufferedInputStream(is); 
      Bitmap bm = BitmapFactory.decodeStream(bis); 
      bis.close(); 
      is.close(); 

      i.setImageBitmap(bm); 
     } 
     catch (IOException e) 
     { 
      Appconstant.showErrorLog("DEBUGTAG Remtoe Image Exception" + e); 
     } 
     return i; 
    } 

    public float getScale(boolean focused, int offset) 
    { 
     return Math.max(0, 1.0f/(float) Math.pow(2, Math.abs(offset))); 
    } 
} 

クラッシュします。これを行うにはどのように、私は

+0

ポストlogcat – Egor

+0

Uncaughthandlerてください:doInBackgroundの実行中にエラーが発生したスレッドAsyncTask#1出duetouncaughtexception () atjava.util.concurrent.FutureTask $ Sync.innerSetException(FutureTask.java:273)java.utilので 。コンテナ.FutureTask.setException(FutureTask.java:124) at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:307) at java.util.concurrent.FutureTask.run(FutureTask.java:137) (ThreadPoolExecutor.java:1068) のjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) のjava.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:561) のjava.lang.Thread.run(スレッド。ジャva:1096) –

+0

doInBackground()のiとbmは何ですか?全体の方法は奇妙に見える – Egor

答えて

1
class GridImages extends AsyncTask<Void, Void, Void> 
    {  
      ProgressDialog dialog = new ProgressDialog(ProfileGridView.this); 

     protected void onPreExecute() 
     {  
      dialog.setMessage("Please wait..."); 
      dialog.setIndeterminate(true); 
      dialog.show(); 
     } 

     protected void onPostExecute(Void unused) 
     { 
      grid.setAdapter(new ImageAdapter(ProfileGridView.this)); 
      dialog.dismiss(); 
     } 

      @Override 
     protected Void doInBackground(Void... params) 
     { 
       parsing();  
      return null; 
     } 
    } 
0

あなたはAsyncTaskの中から、あなたの活動にアクセスするための方法が必要です助けてください - それは外側のタスクではありませんので、あなたは、単に「ProfileGridView.this」を書き込むことはできません。 asynctaskのコンストラクターをオーバーライドして、呼び出しアクティビティーのコンテキストを渡します。

関連する問題