2011-07-15 1 views
0

これは初めての投稿です。タイトルを入力した後、私はすべての関連する質問を終えてもなお問題を抱えています。 平易でシンプルな人は、画像URLを入力してEditTextに入れ、ボタンを押すとボタンの下に画像が表示されます。私はBitmapFactoryを使用しており、そのように保つ必要があります。 AndroidManifest.xmlには、適切なインターネットアクセス許可が既に含まれています。入力したURLとボタンを使用してURLからの画像を表示

Javaはほどです:

package com.display.picture; 

import java.io.BufferedInputStream; 
import java.io.File; 
import java.io.InputStream; 
import java.net.URL; 
import java.net.URLConnection; 

import android.app.Activity; 
import android.os.Bundle; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class DisplayPictureActivity extends Activity { 

    private EditText et; 
    private Button btn; 
    private ImageView iv; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     et = (EditText) findViewById(R.id.et1); 
     iv = (ImageView) findViewById(R.id.iv1); 
     btn = (Button) findViewById(R.id.btn1); 

     btn.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       try 
       { 
        URL url = new URL(et.getText().toString()); 
        URLConnection connection = url.openConnection(); 
        connection.connect(); 
        InputStream is = connection.getInputStream(); 
        BufferedInputStream bis = new BufferedInputStream(is); 
        Bitmap bitmap = BitmapFactory.decodeStream(bis); 
        ImageView myImage = (ImageView) findViewById(R.id.iv1); 
        myImage.setImageBitmap(bitmap); 
        bis.close(); 
        is.close(); 
       } 
       catch (Exception e) { 
        Toast toast = Toast.makeText(getBaseContext(), "Failed to Download Image", Toast.LENGTH_LONG); 
        toast.show(); 
       } 
       Bitmap image = null; 
       iv.setImageBitmap(image); 
      } 
     }); 
    } 
} 

ここで私が見るの質問の大半はハードコーディングされたハイパーリンクを持つ伴います。ここにいる間、私はボタンを打った後、画像のURLを入力して、ビットマップを通じてこれを渡し、ImageViewの中にそれを表示するには、ユーザーを許可するようになってる

私のマニフェスト:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.display.picture" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="8" /> 
    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".DisplayPictureActivity" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 
+0

あなたが持っている問題を記述することはできますか? – Rob

+0

ああ、私はさまざまな画像URLを試しましたが、画像を表示していません。少なくとも私のトーストは、イメージをダウンロードできなかったと私に伝えます。 – Greg

+0

イメージをダウンロードしている間にUIをブロックすることは、おそらく適切ではありません。 –

答えて

1

すると、あなたが持っていることを確認マニフェストファイルに設定されたインターネット許可

<uses-permission android:name="android.permission.INTERNET"/> 

あなたがそれらの閉じのいずれかがスローされた例外を修正します削除、入力ストリームと入力ストリームを使用してバッファリングされた入力ストリームの両方をクローズしようとしています。

ダウンロードを実行するためにAsyncTaskを使用することもできます。ダウンロードが実行されている間はUIをブロックするのが一般的ではありません。ここで

は、ダウンロードするにはAsyncTaskを使用するように変更してコードです:

public class DisplayPictureActivity extends Activity { 
private Button btn; 
private EditText et; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    btn = (Button)findViewById(R.id.button1); 
    et = (EditText)findViewById(R.id.editText1); 

    btn.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      try { 
       URL url = new URL(et.getText().toString()); 
       //URL url = new URL("http://farm7.static.flickr.com/6138/5935946400_934994190e_s_d.jpg"); 
       new MyDownloadTask().execute(url);         
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

private class MyDownloadTask extends AsyncTask<URL, Integer, Bitmap> { 
    @Override 
    protected Bitmap doInBackground(URL... params) { 
     URL url = params[0]; 
     Bitmap bitmap = null; 
     try { 
      URLConnection connection = url.openConnection(); 
      connection.connect(); 
      InputStream is = connection.getInputStream(); 
      BufferedInputStream bis = new BufferedInputStream(is); 
      bitmap = BitmapFactory.decodeStream(bis); 
      bis.close(); 
      //is.close(); THIS IS THE BROKEN LINE 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 

     return bitmap; 
    } 

    @Override 
    protected void onPostExecute(Bitmap bitmap) { 
     if (bitmap != null) { 
      ImageView myImage = (ImageView) findViewById(R.id.imageView1); 
      myImage.setImageBitmap(bitmap); 
     } else { 
      Toast.makeText(getApplicationContext(), "Failed to Download Image", Toast.LENGTH_LONG).show(); 
     } 
    }  
} 

}

+0

ロブ、私はすでに私の元の投稿を述べたようにその許可を含んでいます。私は、UIが何を意味しているのか、AsyncTaskは何かを理解していないのですか? – Greg

+0

マニフェストファイルを元の質問に追加できますか?私はあなたのコードを実行し、それが正しく動作します。 1)あなたのインターネット許可がマニフェストの間違った場所にあります。 2)エミュレータを使用していて、エミュレータプロキシを正しく設定していません。 – Rob

+0

本当ですか?確かに。おかげさまで – Greg

関連する問題