當我的android應用程序中點擊一個按鈕時,它會打開相機應用程序。在相機應用程序中拍攝照片時,照片會上傳到服務器。關於android上的圖片上傳查詢
問題:拍攝照片並在相機應用程序中單擊「保存」後,直到照片上傳到服務器纔會返回到應用程序。
這是因爲我正在等待上載圖像的Thread
完成。
如何解決這個問題?我希望它從相機應用程序返回到應用程序,並想顯示ProgressBar。
對於我的程序是:
- >使用Intent
打開攝像頭應用程序是這樣的:
Intent CameraIntent =new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(CameraIntent,CAMERA_PIC_REQUEST);
- >在該方法中onActivityResult(int requestCode, int resultCode, Intent data)
,我寫了下面的代碼。我在Base64中編碼圖像,並調用Thread
將Base64編碼圖像上傳到服務器。
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==CAMERA_PIC_REQUEST)
{
ThumbNail=(Bitmap) data.getExtras().get("data");
ba=new ByteArrayOutputStream();
ThumbNail.compress(Bitmap.CompressFormat.JPEG,100,ba);
barray=ba.toByteArray();
str_img=Base64.encodeToString(barray,Base64.DEFAULT);
if(resultCode==Activity.RESULT_OK)
{
upload_image = new ThreadUploadImage(str_img);
upload_image.start();
while(upload_image.isAlive())
{
Thread.sleep(100);
}
}
}
}
ThreadUploadImage.java
public class ThreadUploadImage extends Thread {
String str_img,result;
String port=null,ip_addr=null;
public ThreadUploadImage(String str_img)
{
this.str_img=str_img;
}
public void run()
{
try
{
HttpClient client =new DefaultHttpClient();
ip_addr=StaticVariables.ip_addr;
port=StaticVariables.port;
if(ip_addr!=null && port!=null)
{
List<NameValuePair> l =new ArrayList<NameValuePair>();
l.add(new BasicNameValuePair("img_str",str_img));
post.setEntity(new UrlEncodedFormEntity(l));
HttpResponse response=client.execute(post);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
StringBuilder builder = new StringBuilder();
for (String line = null; (line = reader.readLine()) != null;) {
builder.append(line).append("\n");
}
this.result = builder.toString();
Log.e("result_is",result);
} catch(Exception e) {
e.printStackTrace();
}
}
}
問題:當拍攝照片和「保存」點擊相機應用程序,直到圖片被上傳到服務器時,它沒有返回給應用程序。
這是因爲我正在等待正在上傳圖像的線程。
如何解決這個問題?我希望它從相機應用程序返回到應用程序,並且我想顯示一個ProgressBar。
那我怎麼知道它是否正確地上傳圖像? – abhinav 2013-03-26 20:29:37
你能詳細解釋我如何做一個線程回調或廣播?請不要介意..我對這個android開發非常新穎 – abhinav 2013-03-26 20:34:24
當'ThreadUploadImage'完成時,您將知道上傳是成功還是失敗,取決於在'線程'中是否觸發了'Exception'。有很多方法可以告訴你的Activity'ThreadUploadImage'已經完成。我更喜歡創建一個類似'Listener'或回調的簡單類(具體取決於您是否擁有Java或C背景)。 – 2013-03-26 20:37:08