Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid upload file to server networkonmainexception
    primarykey
    data
    text
    <p>I am doing an android application to upload audio files to my web folder. However, I'm getting a NetworkOnMainException.</p> <p><strong>Here's what I've tried so far:</strong></p> <pre><code> public void onClick(View v) { // TODO onClick openGalleryAudio(); } public void openGalleryAudio(){ Intent intent = new Intent(); intent.setType("audio/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent,"Select Audio "), SELECT_AUDIO); } public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == SELECT_AUDIO) { System.out.println("SELECT_AUDIO"); Uri selectedImageUri = data.getData(); selectedPath = getPath(selectedImageUri); System.out.println("SELECT_AUDIO Path : " + selectedPath); doFileUpload(); } } } 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); } private void doFileUpload(){ HttpURLConnection conn = null; DataOutputStream dos = null; DataInputStream inStream = null; String lineEnd = "rn"; String twoHyphens = "--"; String boundary = "*****"; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; int maxBufferSize = 1*1024*1024; String responseFromServer = ""; String urlString = "http://mlssabio.x10.mx/strings-of-beads/webservice/uploadsong.php"; try { //------------------ CLIENT REQUEST FileInputStream fileInputStream = new FileInputStream(new File(selectedPath) ); // open a URL connection to the Servlet URL url = new URL(urlString); // Open a HTTP connection to the URL conn = (HttpURLConnection) url.openConnection(); // Allow Inputs conn.setDoInput(true); // Allow Outputs conn.setDoOutput(true); // Don't use a cached copy. conn.setUseCaches(false); // Use a post method. conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); dos = new DataOutputStream( conn.getOutputStream() ); dos.writeBytes(twoHyphens + boundary + lineEnd); dos.writeBytes("Content-Disposition: form-data; name='uploaded_file';filename='" + selectedPath + "'" + lineEnd); //dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""+ selectedPath + "\"" + 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 &gt; 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); // close streams Log.e("Debug","File is written"); fileInputStream.close(); dos.flush(); dos.close(); } catch (MalformedURLException ex) { Log.e("Debug", "error: " + ex.getMessage(), ex); } catch (IOException ioe) { Log.e("Debug", "error: " + ioe.getMessage(), ioe); } //------------------ read the SERVER RESPONSE try { inStream = new DataInputStream ( conn.getInputStream() ); String str; while (( str = inStream.readLine()) != null) { Log.e("Debug","Server Response "+str); } inStream.close(); } catch (IOException ioex){ Log.e("Debug", "error: " + ioex.getMessage(), ioex); } } </code></pre> <p>It gives me NetworkOnMainException..</p> <p><strong>I tried changing to:</strong></p> <pre><code> new Thread(new Runnable() { public void run() { runOnUiThread(new Runnable() { public void run() { Log.d("Test", "uploading started....."); } }); doFileUpload(); } }).start(); </code></pre> <p>But now it gives me OutOfMemory error</p> <p><strong>Full logcat error here:</strong></p> <pre><code> 12-29 04:58:00.284: E/AndroidRuntime(3959): FATAL EXCEPTION: Thread-108 12-29 04:58:00.284: E/AndroidRuntime(3959): java.lang.OutOfMemoryError 12-29 04:58:00.284: E/AndroidRuntime(3959): at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91) 12-29 04:58:00.284: E/AndroidRuntime(3959): at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201) 12-29 04:58:00.284: E/AndroidRuntime(3959): at libcore.net.http.RetryableOutputStream.write(RetryableOutputStream.java:61) 12-29 04:58:00.284: E/AndroidRuntime(3959): at java.io.DataOutputStream.write(DataOutputStream.java:98) 12-29 04:58:00.284: E/AndroidRuntime(3959): at com.thesis.string.of.beads.AddSong.doFileUpload(AddSong.java:188) 12-29 04:58:00.284: E/AndroidRuntime(3959): at com.thesis.string.of.beads.AddSong.access$0(AddSong.java:142) 12-29 04:58:00.284: E/AndroidRuntime(3959): at com.thesis.string.of.beads.AddSong$1.run(AddSong.java:124) 12-29 04:58:00.284: E/AndroidRuntime(3959): at java.lang.Thread.run(Thread.java:841) </code></pre> <p><strong>Line 188:</strong></p> <pre><code> dos.write(buffer, 0, bufferSize); </code></pre> <p>I don't know what's wrong or missing in this code your help will truly be appreciated. Thanks.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload