如何使用在android中发送数据

时间:2013-11-21 06:27:53

标签: android

如何从Android

将图像发布到服务器中
  • 有人可以解释实现此目的所涉及的过程
  • 让新手理解的步骤
  • 我要做的就是尝试发送单张图片

任何指向学习此主题的好链接,例如博客或教程


我做了什么

我已经审阅了这个link

MainActivity.java

public class MainActivity extends Activity {

    Button submit, uplodbtn;
    EditText name, City;
    ProgressDialog pDialog;
    ImageView iv;
    private Bitmap bitmap;

    private static final int PICK_IMAGE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        submit = (Button) findViewById(R.id.SUBMIT_BUTTON_ID);
        name = (EditText) findViewById(R.id.NAME_EDIT_TEXT_ID);
        City = (EditText) findViewById(R.id.CITY_EDIT_TEXT_ID);
        iv = (ImageView) findViewById(R.id.imageView1);
        uplodbtn = (Button) findViewById(R.id.button1);

        submit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                new MainTest().execute();

                // }
            }
        });

        iv.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                selectImageFromGallery();
            }
        });

        uplodbtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                new ImageUploadTask().execute();

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == PICK_IMAGE && resultCode == RESULT_OK
                && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();

            decodeFile(picturePath);

        }
    }

    public void decodeFile(String filePath) {
        // Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(filePath, o);

        // The new size we want to scale to
        final int REQUIRED_SIZE = 1024;

        // Find the correct scale value. It should be the power of 2.
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE)
                break;
            width_tmp /= 2;
            height_tmp /= 2;
            scale *= 2;
        }

        // Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        bitmap = BitmapFactory.decodeFile(filePath, o2);

        iv.setImageBitmap(bitmap);
    }

    public void selectImageFromGallery() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"),
                PICK_IMAGE);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void postData() {
        // Create a new HttpClient and Post Header

        // You can use NameValuePair for add data to post server and yes you can
        // also append your desire data which you want to post server.

        // Like:
        // yourserver_url+"name="+name.getText().toString()+"city="+City.getText().toString()
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("Your Server URL");

        try {
            // Add your data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("Name", name.getText()
                    .toString()));
            nameValuePairs.add(new BasicNameValuePair("city", City.getText()
                    .toString()));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);
            Log.v("Response", response.toString());

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
        } catch (IOException e) {
            // TODO Auto-generated catch block
        }
    }

    public class MainTest extends AsyncTask<String, Integer, String> {

        @Override
        protected void onPreExecute() {
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Loading..");
            pDialog.setIndeterminate(true);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @Override
        protected String doInBackground(String... params) {

            postData();

            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub

            super.onPostExecute(result);
            // data=jobj.toString();
            pDialog.dismiss();

        }

    }

    class ImageUploadTask extends AsyncTask<Void, Void, String> {
        private String webAddressToPost = "http://your-website-here.com";

        // private ProgressDialog dialog;
        private ProgressDialog dialog = new ProgressDialog(MainActivity.this);

        @Override
        protected void onPreExecute() {
            dialog.setMessage("Uploading...");
            dialog.show();
        }

        @Override
        protected String doInBackground(Void... params) {
            try {
                HttpClient httpClient = new DefaultHttpClient();
                HttpContext localContext = new BasicHttpContext();
                HttpPost httpPost = new HttpPost(webAddressToPost);

                MultipartEntity entity = new MultipartEntity(
                        HttpMultipartMode.BROWSER_COMPATIBLE);

                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                bitmap.compress(CompressFormat.JPEG, 100, bos);
                byte[] data = bos.toByteArray();
                String file = Base64.encodeToString(data, 0);
                entity.addPart("uploaded", new StringBody(file));

                entity.addPart("someOtherStringToSend", new StringBody(
                        "your string here"));

                httpPost.setEntity(entity);
                HttpResponse response = httpClient.execute(httpPost,
                        localContext);
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(
                                response.getEntity().getContent(), "UTF-8"));

                String sResponse = reader.readLine();
                return sResponse;
            } catch (Exception e) {
                // something went wrong. connection with the server error
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            dialog.dismiss();
            Toast.makeText(getApplicationContext(), "file uploaded",
                    Toast.LENGTH_LONG).show();
        }

    }

}

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="32dp"
        android:clickable="false"
        android:src="@drawable/ic_launcher" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/imageView1"
        android:text="Click to upload Image"
        android:textSize="15dp" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/NAME_EDIT_TEXT_ID"
        android:layout_alignParentLeft="true"
        android:clickable="false"
        android:text="NAME"
        android:textSize="20dp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/NAME_EDIT_TEXT_ID"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/CITY_EDIT_TEXT_ID"
        android:layout_alignRight="@+id/button1"
        android:layout_marginBottom="30dp"
        android:ems="10" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/CITY_EDIT_TEXT_ID"
        android:layout_alignLeft="@+id/textView2"
        android:clickable="false"
        android:text="CITY"
        android:textSize="20dp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/CITY_EDIT_TEXT_ID"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/NAME_EDIT_TEXT_ID"
        android:layout_centerVertical="true"
        android:ems="10" />

    <Button
        android:id="@+id/SUBMIT_BUTTON_ID"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="47dp"
        android:text="SUBMIT" />

</RelativeLayout>

我还有博客中提到的 Base64.java


我有错误 ::

entity.addPart("uploaded", new StringBody(file));

entity.addPart("someOtherStringToSend", new StringBody("your string here"));

String body无法解析为类型


MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE);

无法将多部分实体解析为类型


Description Resource    Path    Location    Type
Project 'DataPostingProject' is missing required library: 'C:\Users\admin\Downloads\httpmime-4.1-beta1.jar\httpmime-4.1-beta1.jar'  DataPostingProject      Build path  Build Path Problem

我如何纠正自己

2 个答案:

答案 0 :(得分:2)

这是在onCreate:

 Button camera = (Button)findViewById(R.id.btnCamera);
    camera.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
            startActivityForResult(cameraIntent, CAMERA_REQUEST); 

        }
    });
外面的创建:

  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {  
        Bitmap photo = (Bitmap) data.getExtras().get("data"); 

        Log.d("photo", photo.toString());
        String s= BitMapToString(photo);

        Toast.makeText(Home.this, s, Toast.LENGTH_LONG).show();
        Log.e("e", s);
        new ProgressBarshowNew().execute(s);
      /*  ByteArrayOutputStream stream = new ByteArrayOutputStream();
        //photo.compress(Bitmap.CompressFormat.PNG, 100, stream);


        //  imageView.setImageBitmap(photo);
*/        }  
} 

现在asyn任务:

  class ProgressBarshowNew extends AsyncTask<String, String, String> {
     private ProgressDialog pdia;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pdia = new ProgressDialog(getParent());
        pdia.setMessage("Loading...");
       pdia.show();
    }
    @SuppressLint("NewApi")
    @Override
    protected String doInBackground(String... f_url) {
        int SDK_INT = android.os.Build.VERSION.SDK_INT;
        if (SDK_INT > 8) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                    .permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }
        // ssl code
        DefaultHttpClient client = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("http://"+getResources().getString(R.string.url)+"/Driver/GetDriverId");
        httpPost.setHeader("content-type", "application/json");

        JSONObject data = new JSONObject();

        SharedPreferences prfs = getSharedPreferences("SPFILE", Context.MODE_PRIVATE);
        String USER_ID = prfs.getString("USER_ID", "");

        if(USER_ID.equals(""))
        {
            Log.d("User Id not found", "User Id not found");
        }
        else
        {
            //Toast.makeText(DriverId.this,regId, Toast.LENGTH_LONG).show();
        try {

            data.put("Image", f_url[0].toString());
            data.put("UserId",USER_ID);
            Log.e("Josn", data.toString());

            StringEntity entity = new StringEntity(data.toString());
            httpPost.setEntity(entity);
            HttpResponse hresponse = client.execute(httpPost);
            code = hresponse.getStatusLine().getStatusCode();
            responseString = EntityUtils.toString(hresponse
                    .getEntity());



        } catch (ParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

        if(code==200){
            return responseString;
        }
        else{
            return null;
        }


    }
            @Override
    protected void onPostExecute(String file_url) {

         try {
             pdia.dismiss();
             pdia = null;
            } catch (Exception e) {
            }
          }
 }

功能:

 public String BitMapToString(Bitmap bitmap) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
    byte[] b = baos.toByteArray();
    String strBitMap = Base64.encodeToString(b, Base64.DEFAULT);
    return strBitMap;
}
服务器端

:( C#):

  public static BitmapImage base64image(string base64string)
{
  byte[] fileBytes = Convert.FromBase64String(base64string);

using (MemoryStream ms = new MemoryStream(fileBytes))
{
    Image streamImage = Image.FromStream(ms);
    context.Response.ContentType = "image/jpeg";
    streamImage.Save(context.Response.OutputStream, ImageFormat.Jpeg);
    return streamImage;
}
}

答案 1 :(得分:2)

这是因为您缺少Multipart Entity Jar文件.....

httpmime 4.0.1 jar文件添加到您的项目中.....

将此文件添加到您的项目中.....

右键单击项目 - &gt; 属性 - &gt; Android Java构建路径 - &gt; 添加外部Jar - &gt; 在jar文件的选择路径之后 - &gt; 终于好了。