1

我是Java和Android的新手。帶進度條和網格視圖的Android圖片下載器(Android Runtime)

這裏在這個應用程序我試圖下載多個圖像的進度條並在GridView中顯示圖像。我沒有收到任何錯誤但有一些例外。當我在eclipse中運行此代碼時,Emulator只顯示「不幸停止」。所以請任何人都可以幫我解決這個問題?

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.kailash.imagedownloader/com.kailash.imagedownloader.MainActivity}: java.lang.InstantiationException: can't instantiate class com.kailash.imagedownloader.MainActivity; no empty constructor

newInstance failed: no()

threadid=1: thread exiting with uncaught exception (group=0x40a13300)

下面的代碼:

package com.kailash.imagedownloader; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.MalformedURLException; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

import android.app.Activity; 
import android.app.Dialog; 
import android.app.ProgressDialog; 
import android.graphics.drawable.Drawable; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.Environment; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.GridView; 
import android.widget.ListAdapter; 

public class MainActivity extends Activity{ 

Button btnShowProgress; 
private ProgressDialog pDialog; 
GridView grid_view; 
public static final int progress_bar_type = 0; 

protected static final String[] URLS = { 
"http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_2944.jpg", 
    "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_2989.jpg", 
    "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3005.jpg", 
    "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3012.jpg", 
    "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3034.jpg", 
    "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3047.jpg", 
    "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3092.jpg", 
    "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3110.jpg", 
    "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3113.jpg", 
    "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3128.jpg", 
    "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3160.jpg", 
}; 
public MainActivity(MainActivity mainActivity) { 
    // TODO Auto-generated constructor stub 
} 

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

    GridView gridview = (GridView) findViewById(R.id.grid_view); 
    gridview.setAdapter((ListAdapter) new MainActivity(this)); 

    btnShowProgress = (Button) findViewById(R.id.btnProgressBar); 
    grid_view = (GridView) findViewById(R.id.grid_view); 
    btnShowProgress.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      new DownloadImages().execute(URLS); 
     } 
    }); 

    //new DownloadImages().execute(); 
} 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case progress_bar_type: 
     pDialog = new ProgressDialog(this); 
     pDialog.setMessage("Downloading file. Please wait..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setMax(1000); 
     pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
     return pDialog; 
    default: 
     return null; 
    } 
} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 



public class DownloadImages extends AsyncTask { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      showDialog(progress_bar_type); 
     } 



    protected Object doInBackground(Object... params) { 
     System.out.println("External Storage State = " + Environment.getExternalStorageState()); 
     File directory=new File(Environment.getExternalStorageDirectory(), "/Images"); 
     if (directory.exists()==false) 
     { 
      directory.mkdir(); 
     } 
     for(int i = 0; i <URLS.length; i++) { 
      try { 
       File firstFile=new File(directory+"/" +i+ ".jpeg"); 
       if(firstFile.exists()==false) 
       { 
        HttpClient httpClient =new DefaultHttpClient(); 
        HttpGet httpGet =new HttpGet(URLS[i]); 
        HttpResponse resp = httpClient.execute(httpGet); 
        System.out.println("Status Code = " +resp.getStatusLine().getStatusCode()); 
        if(resp.getStatusLine().getStatusCode()==200) 
        { 
         HttpEntity entity = resp.getEntity(); 
         InputStream is = entity.getContent(); 
         Boolean status = firstFile.createNewFile(); 

         FileOutputStream foutS = new FileOutputStream(firstFile); 
         byte[] buffer = new byte[1024]; 
         long total = 0; 
         int count; 
         while((count = is.read(buffer)) != -1){ 
          total += count; 
          foutS.write(buffer, 0, count); 
         } 
         foutS.close(); 
         is.close(); 
         publishProgress(i); 

         } 
        } 

       }catch(MalformedURLException e){ 
        e.printStackTrace(); 
       }catch(ClientProtocolException e){ 
        e.printStackTrace(); 
       }catch(IOException e){ 
        e.printStackTrace(); 
       } 
     } 
     return null; 
      } 

    protected void onProgressUpdate(String... progress) { 

     pDialog.setProgress(Integer.parseInt(progress[0])); 
    } 

    @SuppressWarnings("unchecked") 
    protected void onProgressUpdate(Object... values){ 
     super.onProgressUpdate(values); 

     } 
    protected void onPostExecute(String file_url) { 
     dismissDialog(progress_bar_type); 
     String imagePath = Environment.getExternalStorageDirectory().toString() + "/Images"; 
      grid_view.setBackgroundDrawable(Drawable.createFromPath(imagePath)); 
     } 
} 


} 

謝謝 * 請幫助 *

+0

請您分享更多的logcat輸出。 – sandrstar

+0

http://stackoverflow.com/a/13226762/1487822 –

+1

@ParagGhetiya你停止評論相同的鏈接alwayz PLZ ..! –

回答

1

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.kailash.imagedownloader/com.kailash.imagedownloader.MainActivity}: java.lang.InstantiationException: can't instantiate class com.kailash.imagedownloader.MainActivity; no empty constructor

擴展Activity時,你不應該創建一個構造。當系統調用空構造函數,並創建另一個時,會導致該類沒有空的構造函數。

也沒有必要創建一個,因爲你不應該自己實例化一個活動。出於某種原因,你實例裏面onCreate您的活動,並將其轉換爲ListAdapter,這是一個錯誤:

gridview.setAdapter((ListAdapter) new MainActivity(this)); 

您應該使用延伸ListAdapter此不同的類。

+1

現在我應該刪除構造函數? –

+1

好吧現在我刪除構造函數我得到錯誤 即在這一行: gridview.setAdapter((ListAdapter)new MainActivity(this)); 錯誤:構造函數MainActivity(MainActivity)未定義 –

+0

我將在一分鐘內更新答案。 – MByD