2011-01-24 9 views
6

인사말,안드로이드 : 사진 업로드

내 안드로이드 전화에서 사진을 업로드하는 데 문제가 있습니다.

public class Uploader{ 
     public void upload(){ 
      Log.i("EOH","hi..."); 
      Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT); 
      photoPickerIntent.setType("image/*"); 
      startActivityForResult(photoPickerIntent, 1); 
     } 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) 
     { 
      if (resultCode == RESULT_OK) 
      { 
       Bundle extras = data.getExtras(); 
       Bitmap b = (Bitmap) extras.get("data"); 
       //what do do now with this Bitmap... 
        //how do I upload it? 




      } 
     } 

    } 

그래서 나는 비트 맵 B가 그러나 나는 다음에 무엇을 해야할지하지 않습니다 : 여기에 내가 사진을 선택하라는 메시지를 표시하기 위해 사용하고 코드는?

내가 가지고 POST 요청을 보내기위한 다음 코드를

List<NameValuePair> params = new ArrayList<NameValuePair>(2); 
params.add(new BasicNameValuePair("someValA", String.valueOf(lat))); 
params.add(new BasicNameValuePair("someValB", String.valueOf(lng))); 
new HttpConnection(handler).post("http://myurl.com/upload.php",params); 

가 어떻게 여기에 비트 맵 이미지를 연결 할 수 있습니까? 나는 Google을 수년간 검색해 왔으며 좋은 방법을 찾지 못했습니다.

누군가 도와 드릴 수 있기를 바랍니다. 사전에

많은 감사, 내가 치라 샤의 제안을 시도했습니다 확인


.

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
     { 
      if (resultCode == RESULT_OK) 
      { 
       Uri imageUri=data.getData(); 
       List<NameValuePair> params = new ArrayList<NameValuePair>(1); 
       params.add(new BasicNameValuePair("image", imageUri.getPath())); 
       post("http://www.myurl.com/ajax/uploadPhoto.php",params); 
      } 
     } 

(권장) 포스트 기능은 다음과 같습니다 :

public void post(String url, List<NameValuePair> nameValuePairs) { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpContext localContext = new BasicHttpContext(); 
      HttpPost httpPost = new HttpPost(url); 

      try { 
       MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 

       for(int index=0; index < nameValuePairs.size(); index++) { 
        if(nameValuePairs.get(index).getName().equalsIgnoreCase("image")) { 
         // If the key equals to "image", we use FileBody to transfer the data 
         entity.addPart(nameValuePairs.get(index).getName(), new FileBody(new File (nameValuePairs.get(index).getValue()))); 
        }else{ 
         // Normal string data 
         entity.addPart(nameValuePairs.get(index).getName(), new StringBody(nameValuePairs.get(index).getValue())); 
        } 
       } 

       httpPost.setEntity(entity); 

       HttpResponse response = httpClient.execute(httpPost, localContext); 
       Log.i("EOH",response.toString()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
    } 

그러나 myurl.com/ajax/uploadPhoto.php이 점점 아무것도 여기 내 코드입니다. uploadPhoto.php에서 활동을 기록하기 위해 PHP 로그를 만들었습니다. 아무 것도 나타나지 않습니다. myurl.com/ajax/uploadPhoto.php를 웹 브라우저에 바로 입력하면 잘 기록됩니다.

더 이상의 제안 사항이 있으십니까?

많은 감사,

+0

와 onclick을 호출 http 게시물은 비동기 작업에서 수행되어야합니다. 그렇지 않으면 단지 발생하지 않습니다. 게시 및 데이터 가져 오기와 비슷한 작업을 수행하면서 비동기 작업의 URL에 게시물을 래핑해야했습니다. (http://developer.android.com/reference/android/os/AsyncTask.html) – Tim

답변

0

아직 감사하지 않은 경우. 비동기 작업의 게시물을 서버에 배치하고 작업을 호출하십시오. 나는 내가 사용하고있는 api가 http posts를 필요로한다는 것을 발견했다. 주 스레드를 잠그는 것을 피하기 위해 주 스레드로부터 멀리 떨어져야한다.

비동기 작업으로 설정하는 것이 상대적으로 쉽고 실제로 작동하기 시작했습니다.

비동기 작업에 대한 자세한 정보 :이 간단한 예를 들어 http://developer.android.com/reference/android/os/AsyncTask.html

내 비동기 작업 중 하나입니다 :

private class SomeAsyncTask extends AsyncTask<String, Void, JSONObject> { 

    @Override 
    protected JSONObject doInBackground(String... arg0) { 

     UserFunctions uf = new UserFunctions(); 
     JSONObject res = uf.doPostToServer(arg0[0], arg0[1], arg0[2], getApplicationContext()); 

     return res; 
    } 

    @Override 
    protected void onPostExecute(JSONObject result) { 

     try { 
      int success = result.getInt("success"); 
      if(success == 1) { 

       Intent vcact = new Intent(getApplicationContext(), OtherActivity.class); 
       vcact.putExtra("id", cid); 
       startActivity(vcact); 
       // close main screen 
       finish(); 

      } else { 
       Toast.makeText(SomeActivity.this, "Error saving to server. Try again.", Toast.LENGTH_SHORT).show(); 
      } 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 

그것은 내가 찾은

new SomeAsyncTask().execute(cid, otherdata, moredata); 
+0

실제 게시물은 uf.doPostToServer에서 수행됩니다 ... 나는 당신이 올바른 길을 가고 있다고 생각합니다. 도움이되는지 확인하십시오. 그것은 나를 위해했다. – Tim