2016-06-21 14 views
0

Androidデベロッパーアプリケーションは本当にシンプルなものですが、ボタンをクリックしてAsyncTaskとフラグメントを使ってオンラインから画像を読み込みますが、それでもヌル画像(画像は間違いなくオンライン)になっていません。マニフェストでインターネット権限が設定され、ボタンとImageViewがfragment_main.xmlで宣言されています。AsyncTaskを使用してWebから画像をロードする

私には何が欠けていますか? Androidのメーカーは、

MainActivity.java

import android.app.ProgressDialog; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 

import java.net.*; 
import java.io.InputStream; 
import android.graphics.*; 
import android.widget.*; 


public class MainActivity extends AppCompatActivity { 

Button button; 
ImageView img; 
Bitmap bitmap; 
ProgressDialog progress; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    button = (Button) findViewById(R.id.button); 
    img = (ImageView) findViewById(R.id.img); 
    button.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      new getImage().execute("https://media-cdn.tripadvisor.com/media/photo-s/03/9b/2d/f2/new-york-city.jpg"); 

     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 


private class getImage extends AsyncTask<String, String, Bitmap> { 

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

     try { 
      bitmap = BitmapFactory.decodeStream((InputStream) new URL(args[0]).getContent()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return bitmap; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     progress = new ProgressDialog(MainActivity.this); 
     progress.setMessage("Loading Image ...."); 
     progress.show(); 
    } 


    @Override 
    protected void onPostExecute(Bitmap image) { 
     super.onPostExecute(image); 

     if(image != null){ 
      img.setImageBitmap(bitmap); 
      progress.dismiss(); 
     } else{ 
      progress.dismiss(); 
     } 
    } 

} 
} 

答えて

0

ください...任意の構文エラーを取り上げていない非同期タスクでそれをしない、あなたを助けることができるライブラリがたくさんあります。

Picassoは、非常に簡単に実装することができ、非同期で動作する素晴らしい画像読み込みライブラリです。アプリへ

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

ファイルをbuild.gradle:

あなたがしなければならないのは、この依存性を追加しています。

その後、ちょうどあなたの活動にこれを追加します。

Picasso.with(this).load("https://media-cdn.tripadvisor.com/media/photo-s/03/9b/2d/f2/new-york-city.jpg").into(img); 

出来上がりは、あなたが行われています!

+0

これに助けを求めて、私はピカソがより良いリソースであることを知りました。残念ながら、私はAsyncTaskを学校で働かせる必要がありました。 – bluebrooklynbrim

+0

ありがとうございました! – bluebrooklynbrim

+0

その場合、[これを見てください](http://stacktips.com/tutorials/android/download-image-using-asynctask-in-android)。 – Marijan

関連する問題