2016-09-06 4 views
0

Ich habe einen Code geschrieben, um Bilder auf Twitter zu durchsuchen, indem ich Hashtags verwende und die Bilder in meiner Anwendung anzeigen.Wie man URL zu ImageView setzt?

Hier meine Struktur. Ich habe eine SearchView, wenn ein Benutzer etwas Text in das SearchView, Twitter4j Query Suche nach ihm auf Twitter. Dann parse ich die Bild-URLs von den Ergebnissen.

Jetzt meine Frage. Wie kann ich die Bilder von den URLs in eine Bildansicht einfügen, um das Bild hinter der URL anzuzeigen?

Hier mein Code:

/* Setup Configurationbuilder for Twitter4j API, build a searchquery for search Twitter, 
    search Twitter with the search string from the SearchView 
*/ 
public void searchTweets(String searchString) { 

    //auth. the application by creating new ConfigurationBuilder 
    ConfigurationBuilder cb = new ConfigurationBuilder(); 
    cb.setJSONStoreEnabled(true); 
    cb.setOAuthConsumerKey("someSecretStuff"); 
    cb.setOAuthConsumerSecret("someSecretStuff"); 
    cb.setOAuthAccessToken("someSecretStuff"); 
    cb.setOAuthAccessTokenSecret("someSecretStuff"); 

    //start the search by build a new query 
    TwitterFactory tf = new TwitterFactory(cb.build()); 
    final twitter4j.Twitter twitter = tf.getInstance(); 
    final Query query = new Query(searchString); 

    //start a new Thread to evaluate the searchQuery 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       //get the results 
       QueryResult result = twitter.search(query); 
       //for each result print the user and the the messagetext 
       for (Status status : result.getTweets()) { 
        twitter4j.MediaEntity [] media = status.getMediaEntities(); 
        for (twitter4j.MediaEntity m : media) { 
         System.out.println(m.getMediaURL()); 
        } 
       } 
      } catch (TwitterException e) { 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 
} 

aktualisieren

Hey Leute,

vielen Dank für alle Ihre Antworten und Hinweise. Jetzt weiß ich, wie man ein Bild von der URL bekommt, aber ich habe immer noch Probleme, es in meinem ImageView zu zeigen. Ich möchte einen Stapel Bilder implementieren, um sie für Gleiches und Abneigendes zu verschieben. Also mache ich eine Schleife, die für jedes Element eine relativeLayout und eine imageView erstellt. Jetzt habe ich versucht, die Bilder von URL in die Bildansicht zu bringen, aber es hat nicht funktioniert. Die App startet und ich sehe nur einen weißen Bildschirm.

Hier ist mein Code:

//for each picture into the list... 
    for (int i = 0; i < imageUrl.size(); i++) { 

     //set RelativeLayout 
     final RelativeLayout relView = new RelativeLayout(this); 
     //set Params for the RelativeLayout 
     relView.setLayoutParams(new RelativeLayout.LayoutParams((windowWidth - 80), windowHeight - 80)); 
     relView.setX(40); 
     relView.setY(40); 
     relView.setTag(i); 
     //set BackgroundColor RelativeLayout 
     relView.setBackgroundColor(Color.WHITE); 

     String url = imageUrl.get(i); 

     //set ImageView 
     ImageView img = new ImageView(this); 
     Picasso 
       .with(this) 
       .load(url) 
       .resize(600, 200) 
       .centerCrop() 
       .into(img); 
     //set params to RelativLayout 
     img.setLayoutParams(new RelativeLayout.LayoutParams((windowWidth), windowHeight)); 
     //show image 
     relView.addView(img); 

     //create and set like stamp 
     final Button imageLike = new Button(this); 
     imageLike.setLayoutParams(new ActionBar.LayoutParams(100, 50)); 
     imageLike.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_stamp_like)); 
     imageLike.setX(20); 
     imageLike.setY(80); 
     imageLike.setAlpha(alphaValue); 

     relView.addView(imageLike); 

     //create and set dislike stamp 
     final Button imagePass = new Button(this); 
     imagePass.setLayoutParams(new ActionBar.LayoutParams(100, 50)); 
     imagePass.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_stamp_pass)); 
     imagePass.setX((windowWidth - 200)); 
     imagePass.setY(100); 
     imagePass.setRotation(45); 
     imagePass.setAlpha(alphaValue); 

     relView.addView(imagePass); 


     //create touchlistener for slide 
     final int finalI = i; 
     relView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       //get screen coordinates 
       x_cord = (int) event.getRawX(); 
       y_cord = (int) event.getRawY(); 

       //set coordinates to RelativeLayout 
       relView.setX(x_cord - screenCenter + 40); 
       relView.setY(y_cord - 650); 

       switch (event.getAction()) { 
        //if picture slide down, nothing happens 
        case MotionEvent.ACTION_DOWN: 
         break; 
        //if pictures slide to side right, set rotation coordinates 
        //to RelativeLayout, set likes to 2 
        case MotionEvent.ACTION_MOVE: 
         x_cord = (int) event.getRawX(); 
         y_cord = (int) event.getRawY(); 
         relView.setX(x_cord - screenCenter + 40); 
         relView.setY(y_cord - 650); 
         if (x_cord >= screenCenter) { 
          relView.setRotation((float) ((x_cord - screenCenter) * (Math.PI/32))); 
          if (x_cord > (screenCenter + (screenCenter/2))) { 
           imageLike.setAlpha(1); 
           if (x_cord > (windowWidth - (screenCenter/4))) { 
            likes = 2; 
           } else { 
            likes = 0; 
           } 

          } else { 
           likes = 0; 
           imageLike.setAlpha(0); 
          } 
          imagePass.setAlpha(0); 
         } else { 

          //Rotation 
          relView.setRotation((float) ((x_cord - screenCenter) * (Math.PI/32))); 
          if (x_cord < (screenCenter/2)) { 
           imagePass.setAlpha(1); 
           if (x_cord < screenCenter/4) { 
            likes = 1; 
           } else { 
            likes = 0; 
           } 
          } else { 
           likes = 0; 
           imagePass.setAlpha(0); 
          } 
          imageLike.setAlpha(0); 
         } 
         break; 
        //if pictures moved up, picture were dropped to the primary position 
        case MotionEvent.ACTION_UP: 
         x_cord = (int) event.getRawX(); 
         y_cord = (int) event.getRawY(); 

         Log.e("X Point", "" + x_cord + " , Y " + y_cord); 
         imagePass.setAlpha(0); 
         imageLike.setAlpha(0); 

         //if like 0 nothing happens 
         if (likes == 0) { 
          Log.e("Event Status", "Nothing"); 
          relView.setX(40); 
          relView.setY(40); 
          relView.setRotation(0); 
          //if like == 1 destroy RelativeLayout with the picture 
         } else if (likes == 1) { 
          Log.e("Event Status", "Passed"); 
          imgContainer.removeView(relView); 
         } else if (likes == 2) { 
          //check and creat list 
          if (likeImageList == null) { 
           likeImageList = new ArrayList<>(); 
          } 
          //add picture to list 
          LikedImage likedImage = new LikedImage(); 
          likedImage.img = (BitmapFactory.decodeResource(getResources(), imageList[finalI])); 

          //save image as file 
          saveImageToExternalStorage(likedImage.img); 
          likeImageList.add(likedImage); 
          Log.e("Event Status", "Liked"); 
          Log.e("Groeße der Liste", "" + likeImageList.size()); 
          imgContainer.removeView(relView); 
         } 
         break; 
        default: 
         break; 
       } 
       return true; 
      } 
     }); 

     imgContainer.addView(relView); 
    } 
+0

Sie müssen das Bild zuerst von der URL herunterladen dann nur Sie können es in Bildansicht setzen. – GrIsHu

Antwort

0

Sie finden das Bild zunächst

public static Bitmap loadBitmap(String url) { 
Bitmap bitmap = null; 
InputStream in = null; 
BufferedOutputStream out = null; 

try { 
    in = new BufferedInputStream(new URL(url).openStream(), IO_BUFFER_SIZE); 

    final ByteArrayOutputStream dataStream = new ByteArrayOutputStream(); 
    out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE); 
    copy(in, out); 
    out.flush(); 

    final byte[] data = dataStream.toByteArray(); 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    //options.inSampleSize = 1; 

    bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,options); 
} catch (IOException e) { 
    Log.e(TAG, "Could not load Bitmap from: " + url); 
} finally { 
    closeStream(in); 
    closeStream(out); 
} 

return bitmap; 

}

dann die Imageview.setImageBitmap verwenden herunterladen, um Bitmap-Set in die ImageView

+0

Hey, das gleiche Problem wie die erste Antwort. Keine Bilder im imageView – dudi

+0

Hey! Erstes Bild wird komplett von der URL heruntergeladen oder nicht –

1

Picaso verwenden ..

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 

in Ihrem Gradel

compile 'com.squareup.picasso:picasso:2.5.2' 
+0

Eine blöde Frage. Was soll ich für den Kontext sagen? Ich speichere die Bild-URLs von Twitter in einer ArrayList . Also für jede URL möchte ich ein ImageView machen und das Bild hineinlegen. Hier mein Code: '// für jedes Bild in die Liste ... für (int i = 0; i dudi

+0

Ich habe versucht:' Picasso.mit (dies) .load (imageUrl.get (i)). In (img); 'aber ich sehe keine Bilder bei den imageViews – dudi

+0

versuchen Bildgröße ändern – Ashish

0

seine einfache, Sie Bildlader mit lazyload Kapazität wie Gleiten verwenden können:

erste Abhängigkeits

zu build.gradle hinzufügen
dependencies { 
    // glide 
    compile 'com.github.bumptech.glide:glide:3.7.0' 
} 

dann verwenden Sie es in Ihrer Aktivität:

String imgUrl = "http://yoururl.com"; 

ImageView imageView = (ImageView) view.findViewById(R.id.thumbnail); 

Glide.with(mContext).load(imgUrl) 
       .thumbnail(0.5f) 
       .crossFade() 
       .diskCacheStrategy(DiskCacheStrategy.ALL) 
       .into(imageView); 

Goodluck.

+0

Hey, dasselbe Problem wie die Antwort unten. Ich habe keine Bilder in meinem ImageView – dudi

+0

sein ur Problem, URL zu finden. aber der Weg ist, dass ich erklärt habe. –