2016-08-05 8 views
2

イメージとその横にテキストがあるリストを表示しようとしています。私は主なもの以外に2つのクラスを持っています。 imageHandlerクラスは、画像をURLからドロウアブルにダウンロードします。 listClassはイメージを割り当てられたimageViewとtext Viewsに設定します。 URLを含めると、画像はまったく表示されません。どんな助け?描画可能なイメージはUIに表示されませんか?

listClass;

import android.app.Activity; 
import android.graphics.drawable.Drawable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class listClass extends ArrayAdapter<String>{ 

    private final Activity context; 
    private final String[] web; 
    private final Drawable[] imageId; 
    public listClass(Activity context, 
         String[] web, Drawable[] imageId) { 
     super(context, R.layout.list, web); 
     this.context = context; 
     this.web = web; 
     this.imageId = imageId; 

    } 
    @Override 
    public View getView(int position, View view, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View rowView= inflater.inflate(R.layout.list, null, true); 
     TextView txtTitle = (TextView) rowView.findViewById(R.id.txt); 

     ImageView imageView = (ImageView) rowView.findViewById(R.id.img); 
     txtTitle.setText(web[position]); 

     imageView.setImageDrawable(imageId[position]); 
     return rowView; 
    } 
} 

imageHandler class;

import android.media.Image; 
import java.net.URL; 
import android.graphics.BitmapFactory; 
import java.io.InputStream; 
import android.graphics.drawable.Drawable; 

public class imageHandler { 

    Image picture; 


    public static Drawable LoadImageFromWebOperations(String url) { 
     try { 
      InputStream is = (InputStream) new URL(url).getContent(); 
      Drawable d = Drawable.createFromStream(is, "earthdownload"); 
      return d; 
     } catch (Exception e) { 
      return null; 
     } 
    } 
} 

MainActivity;

import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.view.View; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.TextView; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.app.FragmentManager; 
import android.widget.FrameLayout; 
import android.widget.Button; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.Toast; 
import android.app.Activity; 
import android.graphics.BitmapFactory; 
import android.graphics.drawable.Drawable; 




public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    ListView list; 
    String[] web = { 
      "asd "}; 
    imageHandler imagess = new imageHandler(); 
    Drawable[] imageId = { imagess.LoadImageFromWebOperations("http://egyptianstreets.com/wp-content/uploads/2016/08/satelliteegypt-400x240.jpg") 
      }; 

    Handler handler; 
    Button button; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     TextView text = (TextView)findViewById(R.id.textView); 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 
     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
     listClass adapter = new 
       listClass(MainActivity.this, web, imageId); 
     list=(ListView)findViewById(R.id.list); 
     list.setAdapter(adapter); 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 
       Toast.makeText(MainActivity.this, "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    } 

答えて

1

ここでは、Volleyライブラリを使用することをおすすめします。それはあなたのためのネットワーキングとキャッシングの部分を処理します。 あなたはこの

パブリッククラスCustomVolleyRequest {

private static CustomVolleyRequest customVolleyRequest; 
private static Context context; 
private RequestQueue requestQueue; 
private ImageLoader imageLoader; 


private CustomVolleyRequest(Context context) { 
    this.context = context; 
    this.requestQueue = getRequestQueue(); 

    imageLoader = new ImageLoader(requestQueue, 
      new ImageLoader.ImageCache() { 
       private final LruCache<String, Bitmap> 
         cache = new LruCache<String, Bitmap>(20); 

       @Override 
       public Bitmap getBitmap(String url) { 
        return cache.get(url); 
       } 

       @Override 
       public void putBitmap(String url, Bitmap bitmap) { 
        cache.put(url, bitmap); 
       } 
      }); 
} 

public static synchronized CustomVolleyRequest getInstance(Context context) { 
    if (customVolleyRequest == null) { 
     customVolleyRequest = new CustomVolleyRequest(context); 
    } 
    return customVolleyRequest; 
} 

public RequestQueue getRequestQueue() { 
    if (requestQueue == null) { 
     Cache cache = new DiskBasedCache(context.getCacheDir(), 10 * 1024 * 1024); 
     Network network = new BasicNetwork(new HurlStack()); 
     requestQueue = new RequestQueue(cache, network); 
     requestQueue.start(); 
    } 
    return requestQueue; 
} 

public ImageLoader getImageLoader() { 
    return imageLoader; 
} 

}

プライベートボイドloadImage(){

String url = editTextUrl.getText().toString().trim(); 
imageLoader = CustomVolleyRequest.getInstance(this.getApplicationContext()) 
      .getImageLoader(); 
imageLoader.get(url, ImageLoader.getImageListener(imageView, 
     R.drawable.image, android.R.drawable.ic_dialog_alert)); 
imageView.setImageUrl(url, imageLoader); 
の下に表示のようなURLから画像をロードのようなボレーリクエストを作成することができます

}

このためにハンドラを使用する必要はありません。

関連する問題