2013-05-10 97 views
-2

我正在使用我的應用程序進行客戶機 - 服務器通信。 我需要發送產品名稱,說明和產品照片。 用戶可以保存數據,之後這些數據將保存在心願單中。 我想將這些數據發送到服務器數據庫。 我成功地向服務器發送了名稱和描述的文本數據,但我真的不知道如何發送圖像文件。 這是我的代碼。Android - 使用POST請求將圖像文件發送到服務器數據庫

AddEditWishlists.java

public class AddEditWishlists extends Activity { 

// Client-Server - Start ////////////////////// 

JSONParser jsonParser = new JSONParser(); 

// url to create new product 
private static String url_create_product = "http://10.56.43.91/android_connect/create_product.php"; 

// JSON Node names 
private static final String TAG_SUCCESS = "success"; 
// Client-Server - End ////////////////////// 


//Define Variables 
private EditText inputname; 
private EditText inputnote; 
private Button upload; 
private Bitmap yourSelectedImage; 
private ImageView inputphoto; 
private Button save; 
private int id; 
private byte[] blob=null; 
byte[] image=null; 

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

private void setUpViews() { 

    inputname = (EditText) findViewById(R.id.inputname); 
    inputnote = (EditText) findViewById(R.id.inputnote); 
    inputphoto = (ImageView) findViewById(R.id.inputphoto); 

    Bundle extras = getIntent().getExtras(); 

    if (extras != null) { 
     id=extras.getInt("id"); 
     inputname.setText(extras.getString("name")); 
     inputnote.setText(extras.getString("note")); 

     image = extras.getByteArray("blob"); 



     if (image != null) { 
      if (image.length > 3) { 
       inputphoto.setImageBitmap(BitmapFactory.decodeByteArray(image,0,image.length)); 
      } 
     } 

    } 



    //Image Upload Button 
    upload = (Button) findViewById(R.id.upload); 
    upload.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
      intent.setType("image/*"); 
      startActivityForResult(intent, 0); 
     } 
    }); 




    // Save the data 
    save = (Button) findViewById(R.id.save); 

    // Save하면 발생되는 이벤트 
    save.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      if (inputname.getText().length() != 0) { 
       AsyncTask<Object, Object, Object> saveContactTask = new AsyncTask<Object, Object, Object>() { 
        @Override 
        protected Object doInBackground(Object... params) { 
         saveContact(); 

         // Client-Server - Start ////////////////////////////////////// 
         String name = inputname.getText().toString(); 
         String description = inputnote.getText().toString(); 


         // Building Parameters 
         List<NameValuePair> params1 = new ArrayList<NameValuePair>(); 
         params1.add(new BasicNameValuePair("name", name)); 
         params1.add(new BasicNameValuePair("description", description)); 

         // getting JSON Object 
         // Note that create product url accepts POST method 
         JSONObject json = jsonParser.makeHttpRequest(url_create_product, "POST", params1); 

         // check log cat fro response 
         Log.d("Create Response", json.toString()); 

         // check for success tag 
         try { 
          int success = json.getInt(TAG_SUCCESS); 

          if (success == 1) { 
           // successfully created product 
           // closing this screen 
           finish(); 
          } else { 
           // failed to create product 
          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

         // Client-Server - End //////////////////////////////////// 

         return null; 
        } 

        @Override 
        protected void onPostExecute(Object result) { 
         finish(); 
        } 
       }; 

       saveContactTask.execute((Object[]) null); 

      } else { 
       AlertDialog.Builder alert = new AlertDialog.Builder(
         AddEditWishlists.this); 
       alert.setTitle("Error In Save Wish List"); 
       alert.setMessage("You need to Enter Name of the Product"); 
       alert.setPositiveButton("OK", null); 
       alert.show(); 
      } 
     } 
    }); 
} 


// If users save data, this will act (data -> db) 
private void saveContact() { 

    if(yourSelectedImage!=null){ 
     ByteArrayOutputStream outStr = new ByteArrayOutputStream(); 
     yourSelectedImage.compress(CompressFormat.JPEG, 100, outStr); 
     blob = outStr.toByteArray(); 
    } 

    else{blob=image;} 

    // Change Text type to string type to save in the DB 
    SQLiteConnector sqlCon = new SQLiteConnector(this); 

    if (getIntent().getExtras() == null) { 
     sqlCon.insertWishlist(inputname.getText().toString(), inputnote.getText().toString(), blob); 
    } 

    else { 
     sqlCon.updateWishlist(id, inputname.getText().toString(), inputnote.getText().toString(),blob); 
    } 


} 

@Override 
protected void onActivityResult(int requestCode, int resultCode,Intent resultdata) { 
    super.onActivityResult(requestCode, resultCode, resultdata); 
    switch (requestCode) { 
    case 0: 
     if (resultCode == RESULT_OK) { 
      Uri selectedImage = resultdata.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 filePath = cursor.getString(columnIndex); 

      cursor.close(); 
      // Convert file path into bitmap image using below line. 
      yourSelectedImage = BitmapFactory.decodeFile(filePath); 
      inputphoto.setImageBitmap(yourSelectedImage); 
     } 

    } 
} 

} 

create_product.php

<?php 

// array for JSON response 
$response = array(); 

// check for required fields 
if (isset($_POST['name']) && isset($_POST['description'])) { 

$name = $_POST['name']; 
$description = $_POST['description']; 

// include db connect class 
require_once __DIR__ . '/db_connect.php'; 

// connecting to db 
$db = new DB_CONNECT(); 

// mysql inserting a new row 
$result = mysql_query("INSERT INTO products(name, description) VALUES('$name', '$description')"); 

// check if row inserted or not 
if ($result) { 
    // successfully inserted into database 
    $response["success"] = 1; 
    $response["message"] = "Product successfully created."; 

    // echoing JSON response 
    echo json_encode($response); 
} else { 
    // failed to insert row 
    $response["success"] = 0; 
    $response["message"] = "Oops! An error occurred."; 

    // echoing JSON response 
    echo json_encode($response); 
    } 
} else { 
// required field is missing 
$response["success"] = 0; 
$response["message"] = "Required field(s) is missing"; 

// echoing JSON response 
echo json_encode($response); 
} 

?>

能否請你給我一些建議,以圖像文件發送到服務器?

+0

我無法找到我再次發佈該內容的link..so解決方案 – 2013-05-10 14:22:00

+0

有什麼建議嗎? – 2013-05-10 14:22:19

+0

請不要只因爲你認爲你沒有得到答案就發表相同的問題。另外,如果你沒有從你的重複問題中得到答案,**你爲什麼會接受答案? – RivieraKid 2013-05-10 15:07:35

回答

0

這是另一種方式發送服務器上的圖像

公共類UploadImage延伸活動{

InputStream inputStream; 
    @Override 
public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.activity_image_upload); 

     Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);   
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); //compress to which format you want. 
     byte [] byte_arr = stream.toByteArray(); 
     String image_str = Base64.encodeBytes(byte_arr); 
     ArrayList<namevaluepair> nameValuePairs = new ArrayList<namevaluepair>(); 

     nameValuePairs.add(new BasicNameValuePair("image",image_str)); 

     try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://10.0.0.23/Upload_image_ANDROID/upload_image.php"); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      String the_string_response = convertResponseToString(response); 
      Toast.makeText(UploadImage.this, "Response " + the_string_response, Toast.LENGTH_LONG).show(); 
     }catch(Exception e){ 
       Toast.makeText(UploadImage.this, "ERROR " + e.getMessage(), Toast.LENGTH_LONG).show(); 
       System.out.println("Error in http connection "+e.toString()); 
     } 
    } 

    public String convertResponseToString(HttpResponse response) throws IllegalStateException, IOException{ 

     String res = ""; 
     StringBuffer buffer = new StringBuffer(); 
     inputStream = response.getEntity().getContent(); 
     int contentLength = (int) response.getEntity().getContentLength(); //getting content length….. 
     Toast.makeText(UploadImage.this, "contentLength : " + contentLength, Toast.LENGTH_LONG).show(); 
     if (contentLength < 0){ 
     } 
     else{ 
       byte[] data = new byte[512]; 
       int len = 0; 
       try 
       { 
        while (-1 != (len = inputStream.read(data))) 
        { 
         buffer.append(new String(data, 0, len)); //converting to string and appending to stringbuffer….. 
        } 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
       } 
       try 
       { 
        inputStream.close(); // closing the stream….. 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
       } 
       res = buffer.toString();  // converting stringbuffer to string….. 

       Toast.makeText(UploadImage.this, "Result : " + res, Toast.LENGTH_LONG).show(); 
       //System.out.println("Response => " + EntityUtils.toString(response.getEntity())); 
     } 
     return res; 
    } 

}

+0

我需要在另一個課程中添加嗎? – 2013-05-10 14:10:07

相關問題