2011-01-24 18 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? 




      } 
     } 

    } 

तो मैं बिटमैप ख है लेकिन मैं आगे क्या करना है पता नहीं है, यहाँ कोड मैं एक तस्वीर का चयन करने के लिए संकेत करने के लिए उपयोग कर रहा हूँ है?

मैं पोस्ट अनुरोध भेजने के लिए निम्न कोड:

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 पोस्ट एक Async कार्य से किया जाना चाहिए अन्यथा वे नहीं होगा। मैं कुछ पोस्टिंग और डेटा प्राप्त करने जैसा कुछ कर रहा हूं और पोस्ट को एआरआईएनसी कार्य में यूआरएल में लपेटने के लिए जरूरी है। (http://developer.android.com/reference/android/os/AsyncTask.html) – Tim

उत्तर

0

यदि आप पहले से नहीं हैं। एक Async कार्य में सर्वर को पोस्ट को लपेटने और कार्य को कॉल करने का प्रयास करें। मैंने पाया कि एपीआई जिसका उपयोग मैं कर रहा हूं, मुख्य थ्रेड को लॉक करने के संभावित मुद्दों से बचने के लिए http थ्रेड को मुख्य थ्रेड से दूर किया जाना चाहिए।

यह एक Async कार्य के रूप में इसे स्थापित करने के लिए अपेक्षाकृत आसान था और यह वास्तव में काम करना शुरू कर दिया।

Async कार्यों पर अधिक जानकारी: http://developer.android.com/reference/android/os/AsyncTask.html

एक सरल उदाहरण के लिए यह मेरा async कार्यों में से एक है:

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

संबंधित मुद्दे