2012-06-04 169 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中显示这些检索到的图像?请为我编辑代码 –