0

こんにちは私はSQLからデータを取得してTextViewに表示する方法を学びました。しかし、私は画像を表示するのにほとんど問題がありません。

画像はURLとしてSQLデータベースに保存されていますが、画像としてビューに表示できません。

調べてみたところ、「特定のURLで画像を表示する方法」を調べましたが、URLを取得して表示するという概念が少しわかりにくいです。よろしくお願いします。ありがとうございました!

これは私が取得しているerrorLogです。

行159を更新:photoMe.setImageDrawable(drawable);

11-15 14:53:21.450: W/LoadImageFromWebOperations(28444): java.net.MalformedURLException: Protocol not found: photo
11-15 14:53:21.480: D/AndroidRuntime(28444): Shutting down VM
11-15 14:53:21.480: W/dalvikvm(28444): threadid=1: thread exiting with uncaught exception (group=0x40c55a68)
11-15 14:53:21.500: E/AndroidRuntime(28444): FATAL EXCEPTION: main
11-15 14:53:21.500: E/AndroidRuntime(28444): java.lang.NullPointerException
11-15 14:53:21.500: E/AndroidRuntime(28444):    at com.app.android.DirectoryDetailMeActivity$GetDirectoryDetails$1.run(DirectoryDetailMeActivity.java:159)
11-15 14:53:21.500: E/AndroidRuntime(28444):    at android.os.Handler.handleCallback(Handler.java:605)
11-15 14:53:21.500: E/AndroidRuntime(28444):    at android.os.Handler.dispatchMessage(Handler.java:92)
11-15 14:53:21.500: E/AndroidRuntime(28444):    at android.os.Looper.loop(Looper.java:137)
11-15 14:53:21.500: E/AndroidRuntime(28444):    at android.app.ActivityThread.main(ActivityThread.java:4517)
11-15 14:53:21.500: E/AndroidRuntime(28444):    at java.lang.reflect.Method.invokeNative(Native Method)
11-15 14:53:21.500: E/AndroidRuntime(28444):    at java.lang.reflect.Method.invoke(Method.java:511)
11-15 14:53:21.500: E/AndroidRuntime(28444):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
11-15 14:53:21.500: E/AndroidRuntime(28444):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
11-15 14:53:21.500: E/AndroidRuntime(28444):    at dalvik.system.NativeStart.main(Native Method)



public class DirectoryDetailMeActivity extends Activity {

    ImageView photoMe;
    TextView txtName;

    String uid;

    String photo = "";

    private ProgressDialog pDialog;

    JSONParser jsonParser = new JSONParser();

    private static final String url_veiw_directory = "directory_detail_me.php";

    private static final String TAG_ID = "uid";
    private static final String TAG_IMG = "photo";
    private static final String TAG_NAME = "name";

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

        uid = i.getStringExtra(TAG_ID);

        new GetDirectoryDetails().execute();

    }

class GetDirectoryDetails extends AsyncTask<String, String, String> {

    protected String doInBackground(String... params) { 

    runOnUiThread(new Runnable() {
        public void run() {

        int success;
            try {

            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("id", uid));

            JSONObject json = jsonParser.makeHttpRequest(url_veiw_directory, "GET", params);

            Log.d("my profile", json.toString());

            success = json.getInt(TAG_SUCCESS);
            if (success == 1) {
            JSONArray directoryObj = json.getJSONArray(TAG_DIRECTORY); 
            JSONObject directory = directoryObj.getJSONObject(0);

            txtName.setText(directory.getString(TAG_NAME));

            Drawable drawable = LoadImageURL(TAG_IMG);
            photoMe.setImageDrawable(drawable);                             

            txtName = (TextView) findViewById(R.id.name);
            photoMe = (ImageView) findViewById(R.id.photo);                         

            }else{

            }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            private Drawable LoadImageURL(String url)
            {
                try
                {
                    InputStream is = (InputStream) new URL(url).getContent();
                    Drawable d = Drawable.createFromStream(is, "photo");
                    return d;
                }
                    catch (Exception e)
                {
                    Log.w("LoadImageURL",e.toString());
                    return null;
                }
            }
            });

            return null;
        }

    }
}
4

1 に答える 1

0

AsyncTask を理解していないようです。ポイントは、UI スレッドで実行されないため、HTTP 接続のような長時間の IO を実行できることです。doInBackground 全体を runOnUIThread にラップすることは、完全に反対です。それはあなただけの問題ではありませんが、リストに載っています。

残りはフォーマットのために読みにくいですが、159行目を見てください。そこで使用している変数の一部がnullです。

于 2012-11-15T20:25:40.650 に答える