2012-11-15 5 views
0

안녕하세요 저는 SQL에서 데이터를 가져 와서 TextView에 표시하는 방법을 배웠습니다. 하지만 이미지를 표시하는 데 거의 문제가 없습니다.데이터베이스에서 이미지를 표시하는 안드로이드

이미지는 SQL 데이터베이스에 URL로 저장되지만 뷰에 이미지로 표시 할 수는 없습니다.

"주어진 URL로 이미지를 표시하는 방법"에 대해 조사했지만 URL과 표시를 잡는 개념을 이해하는 데 어려움이 있습니다. 제발 친절하게 도와주세요. 고맙습니다!

이것은 오류 로그입니다.

업데이트 줄 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; 
     } 

    } 
} 
+0

URL 로더에 TAG_IMG을 전달하면 '새 URL ("사진")과 비슷한 코드를 실행하려고하는데 이는 분명한 이유 때문에 실패합니다 (적절하지 않음). url). – TheZ

+0

@TheZ 감사합니다! 그것을 수정하는 방법을 알아 내려고 노력 중입니다. – user1781367

답변

0

당신은 AsyncTask를 이해하지 못하는 것 같습니다. 핵심은 UI 스레드에서 실행되지 않으므로 HTTP 연결과 같이 장기간 IO를 수행 할 수 있습니다. runOnUIThread에서 전체 doInBackground를 래핑하는 것은 완전히 반대입니다. 그게 유일한 문제는 아니지만 목록에 있습니다.

나머지는 서식으로 인해 읽기가 너무 어렵지만 159 행을 참조하십시오. 사용중인 일부 변수는 null입니다.

+0

예, Drawable LoadImageURL 메서드입니다. 좀 더 자세히 살펴보고 저에게 조언 해 주시겠습니까? 감사합니다. – user1781367

관련 문제