Invio di file di image / text da Android a Webserver (localhost)

Sono molto nuovo per la programmazione Android e la mia attività è di submit dati di image e text a un server web (localhost), ho provato un sacco di codice per eseguire il lavoro

tutti non funzionano. La mia app si blocca each volta che provo ad eseguire il codice, quindi ho deciso di eseguire il debug del codice e vedere cosa è il problema. poi l'ho scoperto

  • incapace di elaborare asset mentre imballava cocos2d-x android
  • Android impostare il colore di background di listItem da Array String
  • Ottenere messaggi da WordPress nella mia applicazione Android
  • Il test di espressione non riesce dopo il successo di clic e di block per 60 secondi
  • In quale periodo cambia il token dell'applicazione del firebase e come gestirlo?
  • Quando utilizzare gli attori in libgdx? Quali sono i cons e i professionisti?
  • each volta che si trova un MultipartEntity , il codice si blocca solo .. Non so davvero perché ..

    Il Codice va così

    Log.v(TAG, "(1)"); HttpClient httpClient; HttpPost postRequest; Log.v(TAG, "(2)" + picturePath); MultipartEntity reqEntity; ResponseHandler<String> responseHandler; Log.v(TAG, "(3)"); File file; FileBody fileBody; Log.v(TAG, "(4)"); httpClient = new DefaultHttpClient(); postRequest = new HttpPost("http://192.168.5.132/mysite/test.php"); responseHandler = new BasicResponseHandler(); Log.v(TAG, "(5)"); // Indicate that this information comes in parts (text and file) reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); Log.v(TAG, "(6)"); file = new File(picturePath); fileBody = new FileBody(file, "images/jpeg"); reqEntity.addPart("fileupload", fileBody); Log.v(TAG, "(7)"); try { reqEntity.addPart("username", new StringBody("un")); reqEntity.addPart("password", new StringBody("pw")); postRequest.setEntity(reqEntity); httpClient.execute(postRequest, responseHandler); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 

    Ho incluso i registri al codice per vedere where il codice si ferma durante l'esecuzione. ecco l'output del gatto log!

     08-27 12:22:47.153: V/(10358): (1) 08-27 12:22:47.153: V/(10358): (2)/storage/sdcard0/Pictures/boarding_pass.bmp 08-27 12:22:47.153: V/(10358): (3) 08-27 12:22:47.153: V/(10358): (4) 08-27 12:22:47.153: V/(10358): (5) 08-27 12:22:47.153: D/AndroidRuntime(10358): Shutting down VM 08-27 12:22:47.153: W/dalvikvm(10358): threadid=1: thread exiting with uncaught exception (group=0x417da2a0) 08-27 12:22:47.163: E/AndroidRuntime(10358): FATAL EXCEPTION: main 08-27 12:22:47.163: E/AndroidRuntime(10358): java.lang.IllegalStateException: Could not execute method of the activity 08-27 12:22:47.163: E/AndroidRuntime(10358): at android.view.View$1.onClick(View.java:3614) 08-27 12:22:47.163: E/AndroidRuntime(10358): at android.view.View.performClick(View.java:4107) 08-27 12:22:47.163: E/AndroidRuntime(10358): at android.view.View$PerformClick.run(View.java:17056) 08-27 12:22:47.163: E/AndroidRuntime(10358): at android.os.Handler.handleCallback(Handler.java:615) 08-27 12:22:47.163: E/AndroidRuntime(10358): at android.os.Handler.dispatchMessage(Handler.java:92) 08-27 12:22:47.163: E/AndroidRuntime(10358): at android.os.Looper.loop(Looper.java:137) 08-27 12:22:47.163: E/AndroidRuntime(10358): at android.app.ActivityThread.main(ActivityThread.java:4830) 08-27 12:22:47.163: E/AndroidRuntime(10358): at java.lang.reflect.Method.invokeNative(Native Method) 08-27 12:22:47.163: E/AndroidRuntime(10358): at java.lang.reflect.Method.invoke(Method.java:511) 08-27 12:22:47.163: E/AndroidRuntime(10358): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 08-27 12:22:47.163: E/AndroidRuntime(10358): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 08-27 12:22:47.163: E/AndroidRuntime(10358): at dalvik.system.NativeStart.main(Native Method) 08-27 12:22:47.163: E/AndroidRuntime(10358): Caused by: java.lang.reflect.InvocationTargetException 08-27 12:22:47.163: E/AndroidRuntime(10358): at java.lang.reflect.Method.invokeNative(Native Method) ...... 

    Il tuo aiuto è veramente necessario .. ti ringrazio tanto ..

  • BluetoothAdapter.getDefaultAdapter () che lancia RuntimeException mentre non è in Attività
  • Creare TabView in fase di runtime?
  • i dati in onActivityResult sono nulli
  • Eclipse: progetto multiplo da una sola fonte
  • Come convertire la string in condizione booleana in java / android?
  • Android API di Google Maps: SupportMapFragment vs MapFragment
  • 3 Solutions collect form web for “Invio di file di image / text da Android a Webserver (localhost)”

    prova questo codice al 100% di lavoro. l'upload di immagini effettuato tramite il passaggio di più elementi

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.fileupload.MainActivity" tools:ignore="MergeRootFrame" > <ImageView android:id="@+id/imageView_pic" android:layout_width="100dp" android:layout_height="150dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:src="@drawable/abc_ab_bottom_solid_light_holo" /> <Button android:id="@+id/button_selectpic" android:layout_width="250dp" android:layout_height="50dp" android:layout_below="@+id/imageView_pic" android:layout_centerHorizontal="true" android:layout_marginTop="18dp" android:text="Browse" /> <Button android:id="@+id/uploadButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button_selectpic" android:layout_alignRight="@+id/button_selectpic" android:layout_below="@+id/button_selectpic" android:text="upload" /> <TextView android:id="@+id/messageText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/uploadButton" android:layout_alignRight="@+id/uploadButton" android:layout_below="@+id/uploadButton" android:layout_marginTop="38dp" android:text="" android:textAppearance="?android:attr/textAppearanceMedium" /> </RelativeLayout> 

    Codice Android

     import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.HttpURLConnection; import java.net.MalformsdURLException; import java.net.URL; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener{ private TextView messageText; private Button uploadButton, btnselectpic; private ImageView imageview; private int serverResponseCode = 0; private ProgressDialog dialog = null; private String upLoadServerUri = null; private String imagepath=null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); uploadButton = (Button)findViewById(R.id.uploadButton); messageText = (TextView)findViewById(R.id.messageText); btnselectpic = (Button)findViewById(R.id.button_selectpic); imageview = (ImageView)findViewById(R.id.imageView_pic); btnselectpic.setOnClickListener(this); uploadButton.setOnClickListener(this); upLoadServerUri = "http://192.168.2.4/fileupload/upljson.php"; } @Override public void onClick(View arg0) { if(arg0==btnselectpic) { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Complete action using"), 1); } else if (arg0==uploadButton) { dialog = ProgressDialog.show(MainActivity.this, "", "Uploading file...", true); messageText.setText("uploading started....."); new Thread(new Runnable() { public void run() { uploadFile(imagepath); } }).start(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1 && resultCode == RESULT_OK) { //Bitmap photo = (Bitmap) data.getData().getPath(); Uri selectedImageUri = data.getData(); imagepath = getPath(selectedImageUri); Bitmap bitmap=BitmapFactory.decodeFile(imagepath); imageview.setImageBitmap(bitmap); messageText.setText("Uploading file path:" +imagepath); } } public String getPath(Uri uri) { String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(uri, projection, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } public int uploadFile(String sourceFileUri) { String fileName = sourceFileUri; HttpURLConnection conn = null; DataOutputStream dos = null; String lineEnd = "\r\n"; String twoHyphens = "--"; String boundary = "*****"; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; int maxBufferSize = 1 * 1024 * 1024; File sourceFile = new File(sourceFileUri); if (!sourceFile.isFile()) { dialog.dismiss(); Log.e("uploadFile", "Source File not exist :"+imagepath); runOnUiThread(new Runnable() { public void run() { messageText.setText("Source File not exist :"+ imagepath); } }); return 0; } else { try { // open a URL connection to the Servlet FileInputStream fileInputStream = new FileInputStream(sourceFile); URL url = new URL(upLoadServerUri); // Open a HTTP connection to the URL conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); // Allow Inputs conn.setDoOutput(true); // Allow Outputs conn.setUseCaches(false); // Don't use a Cached Copy conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("ENCTYPE", "multipart/form-data"); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); conn.setRequestProperty("file", fileName); dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(twoHyphens + boundary + lineEnd); dos.writeBytes("Content-Disposition: form-data; name=\"file\";filename=\"" + fileName + "\"" + lineEnd); dos.writeBytes(lineEnd); // create a buffer of maximum size bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[bufferSize]; // read file and write it into form... bytesRead = fileInputStream.read(buffer, 0, bufferSize); while (bytesRead > 0) { dos.write(buffer, 0, bufferSize); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); bytesRead = fileInputStream.read(buffer, 0, bufferSize); } // send multipart form data necesssary after file data... dos.writeBytes(lineEnd); dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); // Responses from the server (code and message) serverResponseCode = conn.getResponseCode(); String serverResponseMessage = conn.getResponseMessage(); Log.i("uploadFile", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode); if(serverResponseCode == 200){ runOnUiThread(new Runnable() { public void run() { String msg = "File Upload Completed.\n\n See uploaded file here : \n\n" +" C:/xamp/wamp/fileupload/uploads"; messageText.setText(msg); Toast.makeText(MainActivity.this, "File Upload Complete.", Toast.LENGTH_SHORT).show(); } }); } //close the streams // fileInputStream.close(); dos.flush(); dos.close(); } catch (MalformsdURLException ex) { dialog.dismiss(); ex.printStackTrace(); runOnUiThread(new Runnable() { public void run() { messageText.setText("MalformsdURLException Exception : check script url."); Toast.makeText(MainActivity.this, "MalformsdURLException", Toast.LENGTH_SHORT).show(); } }); Log.e("Upload file to server", "error: " + ex.getMessage(), ex); } catch (Exception e) { dialog.dismiss(); e.printStackTrace(); runOnUiThread(new Runnable() { public void run() { messageText.setText("Got Exception : see logcat "); Toast.makeText(MainActivity.this, "Got Exception : see logcat ", Toast.LENGTH_SHORT).show(); } }); Log.e("Upload file to server Exception", "Exception : " + e.getMessage(), e); } dialog.dismiss(); return serverResponseCode; } // End else block } } 

    codice server php

     <?php $response = arrays(); if (empty($_FILES) || $_FILES['file']['error']) { $response["code"] = 2; $response["message"] = "failed to move uploaded file"; echo json_encode($response); } $chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0; $chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0; $fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : $_FILES["file"]["name"]; $filePath = "uploads/$fileName"; // Open temp file $out = @fopen("{$filePath}.part", $chunk == 0 ? "wb" : "ab"); if ($out) { // Read binary input stream and append it to temp file $in = @fopen($_FILES['file']['tmp_name'], "rb"); if ($in) { while ($buff = fread($in, 4096)) fwrite($out, $buff); } else $response["code"] = 2; $response["message"] = "Oops! Failed to open input Stream error occurred."; echo json_encode($response); @fclose($in); @fclose($out); @unlink($_FILES['file']['tmp_name']); } else $response["code"] = 2; $response["message"] = "Oops! Failed to open output error occurred."; echo json_encode($response); // Check if file has been uploaded if (!$chunks || $chunk == $chunks - 1) { // Strip the temp .part suffix off rename("{$filePath}.part", $filePath); } $response["code"] = 2; $response["message"] = "successfully uploaded"; echo json_encode($response); ?> 

    il codice di cui sopra funziona al 100%. se si desidera passare l'entity framework; multipla, provare questo codice nel posto necessario del tuo programma e anche aggiungere il metodo $ _post, ad esempio ($ name = $ _ POST ['username'];) sul server php

     entity.addPart("user_id", new StringBody(user_id)); Log.d("userid",user_id); entity.addPart("username", new StringBody(username)); entity.addPart("password", new StringBody(password)); entity.addPart("filetype",new StringBody("jpeg")); // entity.addPart("photo", new // StringBody("/storage/sdcard0/Download/1.jpg")); httpPost.setEntity(entity); Log.d("URL Request: ", url.toString()); HttpResponse httpResponse = httpClient.execute(httpPost); int code = httpResponse.getStatusLine().getStatusCode(); 

    passare il valore richiesto a questa function e aggiungere $ _post ["username"], $ _ post ["password"] su php

     public JSONObject getJSONFromUrl(String url, String username, String password, String photo_path) { InputStream is = null; JSONObject jObj = null; static String jsonResp = ""; String CONTENT_TYPE_JSON = "application/json"; static String json = ""; Context context; try { File file = null; HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE); if(photo_path != null) file = new File(photo_path); //temp end entity.addPart("username", new StringBody(username)); entity.addPart("password", new StringBody(password)); entity.addPart("file", new FileBody(file)); entity.addPart("filetype",new StringBody("jpeg")); // entity.addPart("photo", new // StringBody("/storage/sdcard0/Download/1.jpg")); httpPost.setEntity(entity); Log.d("URL Request: ", url.toString()); HttpResponse httpResponse = httpClient.execute(httpPost); int code = httpResponse.getStatusLine().getStatusCode(); if (code != 200) { Log.d("HTTP response code is:", Integer.toString(code)); return null; } else { HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } } catch (ConnectTimeoutException e) { // TODO: handle exception Log.e("Timeout Exception", e.toString()); return null; } catch (SocketTimeoutException e) { // TODO: handle exception Log.e("Socket Time out", e.toString()); return null; } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; } catch (ClientProtocolException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); return null; } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); jsonResp = sb.toString(); Log.d("Content: ", sb.toString()); } catch (Exception e) { Log.e("Buffer Error", "Error converting Response " + e.toString()); return null; } // try parse the string to a JSON object try { jObj = new JSONObject(jsonResp); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON Object return jObj; } 

    provare questo, può aiutare e is.it è fatto utilizzando la libreria AsyncHttpClient, get il file jar e allegarlo nel tuo progetto quindi utilizzare il seguente codice per caricare qualsiasi file-

     RequestParams params=new RequestParams(); String file = getImagePath().toString();//get path of file you want to upload File myfile_one=new File(file); try { params.put("image1", myfile_one);//image 1 is the key(it uses key-value pair) } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } AsyncHttpClient client=new AsyncHttpClient(); client.post(Constant.url_two, params,new AsyncHttpResponseHandler(){ //here implement the methods of library and write rest of your code } 

    è ansible trovare altri methods per connettersi al server in questo collegamento. Prova, è davvero semplice

    Device / Emulator è una macchina che ha un proprio loop localhost.

    Come si è appreso, quando si utilizza l'emulatore, lo localhost (127.0.0.1) si riferisce al servizio di back loop del proprio dispositivo, non quello sul proprio computer come si può prevedere.

    Pertanto each volta che il tuo datore locale / 127.0.0.x significa che sta cercando di ricercare il tuo servizio nell'ambiente dispositivo, quindi diventerà fallito. perché il tuo progetto di servizio web non è disponibile sul loop di dispositivo / emulatore.

    Quindi puoi utilizzare 10.0.2.2 per accedere alla tua macchina reale, è un alias creato per aiutare nello sviluppo.

    Spazio di indirizzo della networking Esaminare questo aspetto. http://developer.android.com/tools/devices/emulator.html#networkaddresses

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.