2014-11-05 44 views
1

我想使用经纬度的MultipartEntity.Values发送图像和经度值,并将其存储在名为plat和plong的单独变量中。我能够将图像发送到服务器,但不能同时发送经纬度。在服务器端,只有Latitude最终插入到数据库中。 Bellow是我用来将文件和字符串发送到服务器的代码。任何人都可以建议我在哪里做错了?如何使用Android的MultipartEntity发送多个字符串变量

private class UploadTask extends AsyncTask<Bitmap, Void, Void> { 

    protected Void doInBackground(Bitmap... bitmaps) { 
     if (bitmaps[0] == null) 
      return null; 
     setProgress(0); 

     Bitmap bitmap = bitmaps[0]; 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); // convert 
                    // Bitmap 
                    // to 
                    // ByteArrayOutputStream 
     InputStream in = new ByteArrayInputStream(stream.toByteArray()); // convert 
                      // ByteArrayOutputStream 
                      // to 
                      // ByteArrayInputStream 

     DefaultHttpClient httpclient = new DefaultHttpClient(); 
     try { 
      HttpPost httppost = new HttpPost(
        "http://www.example.com/index.php"); // server 

      MultipartEntity reqEntity = new MultipartEntity(); 
      reqEntity.addPart("myFile", 
        System.currentTimeMillis() + ".jpg", in); 
      httppost.setEntity(reqEntity); 

      reqEntity.addPart("long",String.valueOf(plong)); 
      reqEntity.addPart("lat",String.valueOf(plat)); 


      Log.e(TAG, "request " + httppost.getRequestLine()); 
      HttpResponse response = null; 
      try { 
       response = httpclient.execute(httppost); 
      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      try { 
       if (response != null) 
        Log.i(TAG, "response " 
          + response.getStatusLine().toString()); 
      } finally { 

      } 
     } finally { 

     } 

     if (in != null) { 
      try { 
       in.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     if (stream != null) { 
      try { 
       stream.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     return null; 
    } 

以下是MultipartEntity类中的addPart()方法。

ByteArrayOutputStream out = new ByteArrayOutputStream(); 

public void addPart(final String key, final String value) { 
    writeFirstBoundaryIfNeeds(); 
    try { 
     out.write(("Content-Disposition: form-data; name=\"" +key+"\"\r\n").getBytes()); 
     out.write("Content-Type: text/plain; charset=UTF-8\r\n".getBytes()); 
     out.write("Content-Transfer-Encoding: 8bit\r\n\r\n".getBytes()); 
     out.write(value.getBytes()); 
     out.write(("\r\n--" + boundary + "\r\n").getBytes()); 
    } catch (final IOException e) { 

    } 
} 

回答

1

尝试使用此,

reqEntity.addPart("long",new StringBody(plong)); 
reqEntity.addPart("lat",new StringBody(plat)); 
// or plong.toString() and plat.toString() depending on your plong and plat datatype 
//and then add to httppost 
httppost.setEntity(reqEntity); 

发送lattitude和经度。

但是你可以检查此link,好exapmles在这里,可以是真正有助于了解

0

设置后添加请求的一部分,并添加new StringBody()String.valueOf()实体:

做到这一点,这可能帮助你: -

MultipartEntity reqEntity = new MultipartEntity(); 
reqEntity.addPart("myFile", 
System.currentTimeMillis() + ".jpg", in); 
reqEntity.addPart("long",new StringBody(String.valueOf(plong))); 
reqEntity.addPart("lat",new StringBody(String.valueOf(plat))); 
httppost.setEntity(reqEntity); 
+0

我试过,但我对StringBody收到错误要我做出StringBody类或更改为不同的字符串方法。 – user3393926 2014-11-05 06:27:38

+0

你必须下载jar“httpmime-4.03” – 2014-11-05 07:18:44

+0

通过这个链接下载jar: - http://www.java2s.com/Code/Jar/h/Downloadhttpmime411jar.htm – 2014-11-05 07:32:18

0

是@Harsh是对的。你要设置的实体....添加部分数据到multipartentity之前....

更改代码...

 MultipartEntity reqEntity = new MultipartEntity(); 
     reqEntity.addPart("myFile", 
       System.currentTimeMillis() + ".jpg", in); 
     httppost.setEntity(reqEntity); 

     reqEntity.addPart("long",String.valueOf(plong)); 
     reqEntity.addPart("lat",String.valueOf(plat)); 

这个...

 MultipartEntity reqEntity = new MultipartEntity(); 
     reqEntity.addPart("myFile", 
       System.currentTimeMillis() + ".jpg", in); 
     //httppost.setEntity(reqEntity);//remove this line and place after setting all part values 

     reqEntity.addPart("long",new StringBody(plong)); 
     reqEntity.addPart("lat",new StringBody(plat)); 
     httppost.setEntity(reqEntity); //place it here.... 
+0

我也这样做了,但没有得到任何改进。 – user3393926 2014-11-05 06:25:10

+0

必须看到我更新的代码?如果是的话...那么你会plz..show我你的网络服务文件....首先确保..did该服务接收经纬度和长期价值...因为我认为从android方面..一切都很好...所以请确保这些值由webservice接收..?如果可能,请告诉我你的服务档案? – 2014-11-05 07:35:09

相关问题