2012-06-04 166 views
1

我想顯示圖像從mysql服務器(在localhost中測試)使用imageurl,我有我的服務器上的圖像,在android客戶端應用程序作爲gridview與text.how我使用imageurl我的代碼? mymainmenu.java圖像顯示爲gridview

public class MainMenu extends Activity { 



    GridView gridView; 

    static final String[] MOBILE_OS = new String[] { 
     "Android", "iOS","Windows", "Blackberry" }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mainmenu_list); 


     gridView = (GridView) findViewById(R.id.gridView1); 

     gridView.setAdapter(new ImageAdapter(this, MOBILE_OS)); 

     gridView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 
       Toast.makeText(
        getApplicationContext(), 
        ((TextView) v.findViewById(R.id.grid_item_label)) 
        .getText(), Toast.LENGTH_SHORT).show(); 

      } 
     }); 

    } 

} 

我imageadapter.java:

public class ImageAdapter extends BaseAdapter { 
private Context context; 
private final String[] mobileValues; 
    public ImageAdapter(Context context, String[] mobileValues) { 
    this.context = context; 
    this.mobileValues = mobileValues; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View gridView; 

    if (convertView == null) { 

     gridView = new View(context); 

     // get layout from list.xml 
     gridView = inflater.inflate(R.layout.list, null); 

     // set value into textview 
     TextView textView = (TextView) gridView 
       .findViewById(R.id.grid_item_label); 
     textView.setText(mobileValues[position]); 

     // set image based on selected text 
     ImageView imageView = (ImageView) gridView 
       .findViewById(R.id.grid_item_image); 

     String mobile = mobileValues[position]; 

     if (mobile.equals("Windows")) { 
      imageView.setImageResource(R.drawable.imggrid); 
     } else if (mobile.equals("iOS")) { 
      imageView.setImageResource(R.drawable.imggrid); 
     } else if (mobile.equals("Blackberry")) { 
      imageView.setImageResource(R.drawable.imggrid); 
     } else { 
      imageView.setImageResource(R.drawable.imggrid); 
     } 

    } else { 
     gridView = (View) convertView; 
    } 

    return gridView; 
} 

@Override 
public int getCount() { 
    return mobileValues.length; 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

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

}

我硝基甲苯知道如何使用我的代碼如下:

try { 
      URL url = new URL(imageFileURL); 
      URLConnection conn = url.openConnection();     
      HttpURLConnection httpConn = (HttpURLConnection)conn; 
      httpConn.setRequestMethod("GET"); 
      httpConn.connect();    
      if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) { 
      InputStream inputStream = httpConn.getInputStream();      
      Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 
      inputStream.close(); 
      img.setImageBitmap(bitmap); 
      } 
      } catch (MalformedURLException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
      } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      } 
+0

在此先感謝..有人請幫助 –

+0

什麼是確切的概率?你有什麼錯誤嗎?如果是,那麼請發佈logcat。 – Shrikant

+0

請使用[** Android - 通用圖像加載器**](https://github.com/nostra13/Android-Universal-Image-Loader) –

回答

1

把圖像下載代碼AsyncTaskHere is the explanation。 在getView方法中執行一個asynctask實例,即每次獲取一個圖像。執行你的AsyncTask讓它知道在哪裏圖像下載後置之前

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
ImageView mImageView; 
public void setImageView(ImageView img) { 
     mImageView = img; 
} 

protected Bitmap doInBackground(String... urls) { 
    return loadImageFromNetwork(urls[0]); 
} 

protected void onPostExecute(Bitmap result) { 
    mImageView.setImageBitmap(result); 
} 

}

呼叫task.setImageView(yourImageViewinGrid)

+0

查看示例代碼我添加到我的asnwer .. – Ronnie

+0

謝謝@ userSeven7s,但我有近10個圖像目前和數量可能會增加更新在服務器上。所以你可以告訴我如何檢索所有放在服務器上的特定文件夾的圖片可以同時下載並顯示在我的客戶端應用程序?我需要將一些文字與每個圖像一起作爲項目名稱。這樣,點擊時應該打開另一個活動。再次感謝 –

0

我硝基甲苯知道如何使用我的代碼如下:

該代碼會下載圖像,你可以在單獨的線程中放置任何AsyncTaskThread並設置在下載圖像imageview ...就這麼簡單。有在網絡上這麼多例子,你可以在google出來

EIDTED

代碼下載圖像

public class AsyncFetchImage extends AsyncTask<String, Void, Bitmap>{ 

    private WeakReference<ImageView> imageReference; 
// private WeakReference<Dialog> dialogReferance; 

    public AsyncFetchImage(ImageView imageview) { 
     imageReference = new WeakReference<ImageView>(imageview); 
//  dialogReferance = new WeakReference<Dialog>(dialog); 
    } 

    @Override 
    protected Bitmap doInBackground(String... s) { 

     return downloadImage(s[0]); 
    } 

    private Bitmap downloadImage(String url) { 

     final AndroidHttpClient client = AndroidHttpClient.newInstance("Nixit"); 
     final HttpGet getRequest = new HttpGet(url); 
     try { 

      HttpResponse response = client.execute(getRequest); 
      final int statusCode = response.getStatusLine().getStatusCode(); 

      if(statusCode != HttpStatus.SC_OK){ 
       Log.w("ImageDownloader", "Error " + statusCode + " while retrieving bitmap from " + url); 
       return null; 
      } 
      final HttpEntity entity = response.getEntity(); 
      if(entity != null){ 
       InputStream is = null; 
       try{ 
        is = entity.getContent(); 
        final Bitmap bit = BitmapFactory.decodeStream(is); 
        return bit; 
       }finally{ 
        if(is != null) 
         is.close(); 
        entity.consumeContent(); 
       } 
      } 


     } catch (IOException e) { 
      e.printStackTrace(); 
      return null; 
     } finally{ 
      if(client != null){ 
       client.close(); 
      } 
     } 
     Log.i("Image Fetch","Image Fetch Complete"); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     if(isCancelled()){ 
      result = null; 
     } 
     if(imageReference != null){ 
      ImageView imageView = imageReference.get(); 
//   Dialog di = dialogReferance.get(); 
      if (imageView != null) { 
       imageView.setImageBitmap(result); 
//    di.show(); 
      } 

     } 
    } 


} 

如何使用: -

imageView = (ImageView)dialog.findViewById(R.id.imageView1); 

AsyncFetchImage fetchImage = new AsyncFetchImage(imageView); 
fetchImage.execute(url); 

你可以使用此適配器的getview方法

希望能夠幫助

+0

謝謝@Nixit Patel ..我嘗試了幾個例子,但沒有一個適用於我。向我展示如何將URL代碼段合併到mainmenu和imageadapter類中?這將更有幫助 –

+0

@ ess.crazy在帖子 –

+0

中添加代碼thanx @Nixit Patel ..但我無法配置我的imageadapter類。如果你不介意,告訴我到底如何修改我的mainmenu類..你可以編輯mainmenu類以便清楚理解。 –

0

爲了獲取圖像,你必須做一些事情,如:

URL new_url = new URL("your url"); 
Bitmap image_bitmap = BitmapFactory.decodeStream(newurl.openConnection() .getInputStream()); ImageView image_view = new ImageView(this); 
image_view.setImageBitmap(image_bitmap); 

無論如何,最好是下載圖片作爲背景的任務。我實際上做的是使用一個私有內部類來創建一個自定義視圖,該內部類擴展AsyncTask以便爲您下載圖像。

+0

謝謝@Warut Surapat..can你告訴我如何在我的gridview中顯示這些檢索到的圖像?請爲我編輯代碼 –