2016-09-01 6 views
3

私はウェブサイトのチュートリアルの1つからプログラムを作成しようとしました。このプログラムは、PHPサーバーにファイルをアップロードすると、アプリケーションが動作します。アクティビティをフラグメントに変換しようとしました

私のプロジェクト名はです。サーバーへのファイルのアップロード 1つのメインアクティビティと1つのファイルパスがあります。

これは、メインのレイアウトのためのコードです:

<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:paddingTop="@dimen/activity_vertical_margin" 
android:background="@color/colorAccent" 
tools:context="me.pratamax.uploadfiletoserver.MainActivity"> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:textSize="18sp" 
    android:id="@+id/tvHeading" 
    android:text="Touch the icon below to upload file to server" 
    android:textColor="#fff" 
    android:textStyle="bold"/> 
<ImageView 
    android:id="@+id/ivAttachment" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:src="@mipmap/ic_launcher" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true"/> 

<TextView 
    android:id="@+id/tv_file_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#fff" 
    android:layout_marginTop="10dp" 
    android:gravity="center" 
    android:layout_below="@+id/ivAttachment" 
    android:layout_centerHorizontal="true"/> 

<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/b_upload" 
    android:text="Upload" 
    android:textStyle="bold" 
    android:textSize="20sp" 
    android:layout_alignParentBottom="true" 
    android:gravity="center" 
    android:textColor="#fff" 
    android:background="#039be5"/> 
</RelativeLayout> 

とJavaのメインアクティビティコード用:

package me.pratamax.uploadfiletoserver; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.net.Uri; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 

private static final int PICK_FILE_REQUEST = 1; 
private static final String TAG = MainActivity.class.getSimpleName(); 
private String selectedFilePath; 
private String SERVER_URL = "http://192.168.0.29/aji/AndroidFileUpload/UploadToServer.php"; 
ImageView ivAttachment; 
Button bUpload; 
TextView tvFileName; 
ProgressDialog dialog; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ivAttachment = (ImageView) findViewById(R.id.ivAttachment); 
    bUpload = (Button) findViewById(R.id.b_upload); 
    tvFileName = (TextView) findViewById(R.id.tv_file_name); 
    ivAttachment.setOnClickListener(this); 
    bUpload.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    if(v== ivAttachment){ 

     //on attachment icon click 
     showFileChooser(); 
    } 
    if(v== bUpload){ 

     //on upload button Click 
     if(selectedFilePath != null){ 
      dialog = ProgressDialog.show(MainActivity.this,"","Uploading File...",true); 

      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        //creating new thread to handle Http Operations 
        uploadFile(selectedFilePath); 
       } 
      }).start(); 
     }else{ 
      Toast.makeText(MainActivity.this,"Please choose a File First",Toast.LENGTH_SHORT).show(); 
     } 

    } 
} 

private void showFileChooser() { 
    Intent intent = new Intent(); 
    //sets the select file to all types of files 
    intent.setType("file/*"); 
    //allows to select data and return it 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    //starts new activity to select file and return data 
    startActivityForResult(Intent.createChooser(intent,"Choose File to Upload.."),PICK_FILE_REQUEST); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode == Activity.RESULT_OK){ 
     if(requestCode == PICK_FILE_REQUEST){ 
      if(data == null){ 
       //no data present 
       return; 
      } 


      Uri selectedFileUri = data.getData(); 
      selectedFilePath = FilePath.getPath(this,selectedFileUri); 
      Log.i(TAG,"Selected File Path:" + selectedFilePath); 

      if(selectedFilePath != null && !selectedFilePath.equals("")){ 
       tvFileName.setText(selectedFilePath); 
      }else{ 
       Toast.makeText(this,"Cannot upload file to server",Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
} 

//android upload file to server 
public int uploadFile(final String selectedFilePath){ 

    int serverResponseCode = 0; 

    HttpURLConnection connection; 
    DataOutputStream dataOutputStream; 
    String lineEnd = "\r\n"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 


    int bytesRead,bytesAvailable,bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1 * 1024 * 1024; 
    File selectedFile = new File(selectedFilePath); 


    String[] parts = selectedFilePath.split("/"); 
    final String fileName = parts[parts.length-1]; 

    if (!selectedFile.isFile()){ 
     dialog.dismiss(); 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       tvFileName.setText("Source File Doesn't Exist: " + selectedFilePath); 
      } 
     }); 
     return 0; 
    }else{ 
     try{ 
      FileInputStream fileInputStream = new FileInputStream(selectedFile); 
      URL url = new URL(SERVER_URL); 
      connection = (HttpURLConnection) url.openConnection(); 
      connection.setDoInput(true);//Allow Inputs 
      connection.setDoOutput(true);//Allow Outputs 
      connection.setUseCaches(false);//Don't use a cached Copy 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Connection", "Keep-Alive"); 
      connection.setRequestProperty("ENCTYPE", "multipart/form-data"); 
      connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
      connection.setRequestProperty("uploaded_file",selectedFilePath); 

      //creating new dataoutputstream 
      dataOutputStream = new DataOutputStream(connection.getOutputStream()); 

      //writing bytes to data outputstream 
      dataOutputStream.writeBytes(twoHyphens + boundary + lineEnd); 
      dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" 
        + selectedFilePath + "\"" + lineEnd); 

      dataOutputStream.writeBytes(lineEnd); 

      //returns no. of bytes present in fileInputStream 
      bytesAvailable = fileInputStream.available(); 
      //selecting the buffer size as minimum of available bytes or 1 MB 
      bufferSize = Math.min(bytesAvailable,maxBufferSize); 
      //setting the buffer as byte array of size of bufferSize 
      buffer = new byte[bufferSize]; 

      //reads bytes from FileInputStream(from 0th index of buffer to buffersize) 
      bytesRead = fileInputStream.read(buffer,0,bufferSize); 

      //loop repeats till bytesRead = -1, i.e., no bytes are left to read 
      while (bytesRead > 0){ 
       //write the bytes read from inputstream 
       dataOutputStream.write(buffer,0,bufferSize); 
       bytesAvailable = fileInputStream.available(); 
       bufferSize = Math.min(bytesAvailable,maxBufferSize); 
       bytesRead = fileInputStream.read(buffer,0,bufferSize); 
      } 

      dataOutputStream.writeBytes(lineEnd); 
      dataOutputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

      serverResponseCode = connection.getResponseCode(); 
      String serverResponseMessage = connection.getResponseMessage(); 

      Log.i(TAG, "Server Response is: " + serverResponseMessage + ": " + serverResponseCode); 

      //response code of 200 indicates the server status OK 
      if(serverResponseCode == 200){ 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         tvFileName.setText("File Upload completed.\n\n You can see the uploaded file here: \n\n" + "http://coderefer.com/extras/uploads/"+ fileName); 
        } 
       }); 
      } 

      //closing the input and output streams 
      fileInputStream.close(); 
      dataOutputStream.flush(); 
      dataOutputStream.close(); 



     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        Toast.makeText(MainActivity.this,"File Not Found",Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
      Toast.makeText(MainActivity.this, "URL error!", Toast.LENGTH_SHORT).show(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
      Toast.makeText(MainActivity.this, "Cannot Read/Write File!", Toast.LENGTH_SHORT).show(); 
     } 
     dialog.dismiss(); 
     return serverResponseCode; 
    } 
} 
} 

とファイルパスコード用:

package me.pratamax.uploadfiletoserver; 

/** 
* Created by ditaa on 30/08/2016. 
*/ 
import android.annotation.TargetApi; 
import android.content.ContentUris; 
import android.content.Context; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Build; 
import android.os.Environment; 
import android.provider.DocumentsContract; 
import android.provider.MediaStore; 

public class FilePath { 

    /** 
    * Method for return file path of Gallery image/ Document/Video/Audio 
    * 
    * @param context 
    * @param uri 
    * @return path of the selected image file from gallery 
    */ 
    @TargetApi(Build.VERSION_CODES.KITKAT) 
    public static String getPath(final Context context, final Uri uri) { 

     // check here to KITKAT or new version 
     final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; 

     // DocumentProvider 
     if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { 

      // ExternalStorageProvider 
      if (isExternalStorageDocument(uri)) { 
       final String docId = DocumentsContract.getDocumentId(uri); 
       final String[] split = docId.split(":"); 
       final String type = split[0]; 

       if ("primary".equalsIgnoreCase(type)) { 
        return Environment.getExternalStorageDirectory() + "/" 
          + split[1]; 
       } 
      } 
      // DownloadsProvider 
      else if (isDownloadsDocument(uri)) { 

       final String id = DocumentsContract.getDocumentId(uri); 
       final Uri contentUri = ContentUris.withAppendedId(
         Uri.parse("content://downloads/public_downloads"), 
         Long.valueOf(id)); 

       return getDataColumn(context, contentUri, null, null); 
      } 
      // MediaProvider 
      else if (isMediaDocument(uri)) { 
       final String docId = DocumentsContract.getDocumentId(uri); 
       final String[] split = docId.split(":"); 
       final String type = split[0]; 

       Uri contentUri = null; 
       if ("image".equals(type)) { 
        contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
       } else if ("video".equals(type)) { 
        contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; 
       } else if ("audio".equals(type)) { 
        contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
       } 

       final String selection = "_id=?"; 
       final String[] selectionArgs = new String[] { split[1] }; 

       return getDataColumn(context, contentUri, selection, 
         selectionArgs); 
      } 
     } 
     // MediaStore (and general) 
     else if ("content".equalsIgnoreCase(uri.getScheme())) { 

      // Return the remote address 
      if (isGooglePhotosUri(uri)) 
       return uri.getLastPathSegment(); 

      return getDataColumn(context, uri, null, null); 
     } 
     // File 
     else if ("file".equalsIgnoreCase(uri.getScheme())) { 
      return uri.getPath(); 
     } 

     return null; 
    } 

    /** 
    * Get the value of the data column for this Uri. This is useful for 
    * MediaStore Uris, and other file-based ContentProviders. 
    * 
    * @param context 
    *   The context. 
    * @param uri 
    *   The Uri to query. 
    * @param selection 
    *   (Optional) Filter used in the query. 
    * @param selectionArgs 
    *   (Optional) Selection arguments used in the query. 
    * @return The value of the _data column, which is typically a file path. 
    */ 
    public static String getDataColumn(Context context, Uri uri, 
             String selection, String[] selectionArgs) { 

     Cursor cursor = null; 
     final String column = "_data"; 
     final String[] projection = { column }; 

     try { 
      cursor = context.getContentResolver().query(uri, projection, 
        selection, selectionArgs, null); 
      if (cursor != null && cursor.moveToFirst()) { 
       final int index = cursor.getColumnIndexOrThrow(column); 
       return cursor.getString(index); 
      } 
     } finally { 
      if (cursor != null) 
       cursor.close(); 
     } 
     return null; 
    } 

    /** 
    * @param uri 
    *   The Uri to check. 
    * @return Whether the Uri authority is ExternalStorageProvider. 
    */ 
    public static boolean isExternalStorageDocument(Uri uri) { 
     return "com.android.externalstorage.documents".equals(uri 
       .getAuthority()); 
    } 

    /** 
    * @param uri 
    *   The Uri to check. 
    * @return Whether the Uri authority is DownloadsProvider. 
    */ 
    public static boolean isDownloadsDocument(Uri uri) { 
     return "com.android.providers.downloads.documents".equals(uri 
       .getAuthority()); 
    } 

    /** 
    * @param uri 
    *   The Uri to check. 
    * @return Whether the Uri authority is MediaProvider. 
    */ 
    public static boolean isMediaDocument(Uri uri) { 
     return "com.android.providers.media.documents".equals(uri 
       .getAuthority()); 
    } 

    /** 
    * @param uri 
    *   The Uri to check. 
    * @return Whether the Uri authority is Google Photos. 
    */ 
    public static boolean isGooglePhotosUri(Uri uri) { 
     return "com.google.android.apps.photos.content".equals(uri 
       .getAuthority()); 
    } 
} 

そして、上のいくつかのPHPコード私のWebサーバー。それは仕事です。

その後、私はタブを使ったアップロードとダウンロードのための新しいプロジェクトを作りたいと思います。私はそれを断片に変えなければなりません。

メインアクティビティ、フラグメントダウンロード、フラグメントアップロード、ファイルパスがあります。

は、ここでは主なレイアウトのためである:ここでは

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:titleTextColor="@color/colorBlack" 
      app:layout_scrollFlags="scroll|enterAlways" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabMode="fixed" 
      app:tabGravity="fill" 
      android:background="@color/colorGreenDark" 
      app:tabIndicatorColor="@color/colorGray" 
      app:tabIndicatorHeight="6dp"/> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
</android.support.design.widget.CoordinatorLayout> 

は、主な活動のJava用です:私は最後のプロジェクトからFilePath.java、UploadFragment.java、およびfragment_upload.xmlを使用

package me.pratamax.uploaddownload; 

import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.Toolbar; 

import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 

    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 
    private int[] tabIcons = { 
      R.drawable.ic_unarchive_black_24dp, 
      R.drawable.ic_archive_black_24dp 
    }; 

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

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
//  getSupportActionBar().setDisplayHomeAsUpEnabled(true); // Kode untuk kasih tombol back 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 

     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 
     setupTabIcons(); 
    } 

    private void setupTabIcons() { 
     tabLayout.getTabAt(0).setIcon(tabIcons[0]); 
     tabLayout.getTabAt(1).setIcon(tabIcons[1]); 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFrag(new UploadFragment(), "Upload"); 
     adapter.addFrag(new DownloadFragment(), "Download"); 
     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     public void addFrag(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

しかし、私はそれを動作させ、それを断片化する方法を知らない。

答えて

1

Upload fragmentクラスの実装部分を与えています。ダウンロードフラグメントクラスを達成するために同じ方法で使用してください。あなたのViewPagerは、1つはアップロードされ、もう1つはダウンロードされる2つのフラグメントで構成されます。したがって、Fragmentクラスを拡張してonCreateViewメソッドをオーバーライドすることによって、これら2つのクラスを実装します。ですから、あなたはアクティビティの中でonCreateを実行し、それに従って、upload_fragment.xmlから参照を取得してください。

upload_fragmentのレイアウトコードは、メインレイアウトファイルと同じです。

UploadFragmentクラス。

public class UploadFragment extends Fragment implements View.OnClickListener{ 
private static final int PICK_FILE_REQUEST = 1; 
private static final String TAG = MainActivity.class.getSimpleName(); 
private String selectedFilePath; 
private String SERVER_URL = "http://192.168.0.29/aji/AndroidFileUpload/UploadToServer.php"; 
ImageView ivAttachment; 
Button bUpload; 
TextView tvFileName; 
ProgressDialog dialog; 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View rootView; 
    rootView = inflater.inflate(R.layout.upload_frament,container,false); 
    ivAttachment = (ImageView) rootView.findViewById(R.id.ivAttachment); 
    bUpload = (Button) rootView.findViewById(R.id.b_upload); 
    tvFileName = (TextView) rootView.findViewById(R.id.tv_file_name); 
    ivAttachment.setOnClickListener(this); 
    bUpload.setOnClickListener(this); 
    return rootView; 
} 

@Override 
public void onClick(View v) { 
    if(v== ivAttachment){ 

     //on attachment icon click 
     showFileChooser(); 
    } 
    if(v== bUpload){ 

     //on upload button Click 
     if(selectedFilePath != null){ 
      dialog = ProgressDialog.show(getActivity(),"","Uploading File...",true); 

      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        //creating new thread to handle Http Operations 
        uploadFile(selectedFilePath); 
       } 
      }).start(); 
     }else{ 
      Toast.makeText(getActivity(),"Please choose a File First",Toast.LENGTH_SHORT).show(); 
     } 

    } 
} 

private void showFileChooser() { 
    Intent intent = new Intent(); 
    //sets the select file to all types of files 
    intent.setType("file/*"); 
    //allows to select data and return it 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    //starts new activity to select file and return data 
    startActivityForResult(Intent.createChooser(intent,"Choose File to Upload.."),PICK_FILE_REQUEST); 
} 

//android upload file to server 
public int uploadFile(final String selectedFilePath){ 

    int serverResponseCode = 0; 

    HttpURLConnection connection; 
    DataOutputStream dataOutputStream; 
    String lineEnd = "\r\n"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 


    int bytesRead,bytesAvailable,bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1 * 1024 * 1024; 
    File selectedFile = new File(selectedFilePath); 


    String[] parts = selectedFilePath.split("/"); 
    final String fileName = parts[parts.length-1]; 

    if (!selectedFile.isFile()){ 
     dialog.dismiss(); 

     getActivity().runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       tvFileName.setText("Source File Doesn't Exist: " + selectedFilePath); 
      } 
     }); 
     return 0; 
    }else{ 
     try{ 
      FileInputStream fileInputStream = new FileInputStream(selectedFile); 
      URL url = new URL(SERVER_URL); 
      connection = (HttpURLConnection) url.openConnection(); 
      connection.setDoInput(true);//Allow Inputs 
      connection.setDoOutput(true);//Allow Outputs 
      connection.setUseCaches(false);//Don't use a cached Copy 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Connection", "Keep-Alive"); 
      connection.setRequestProperty("ENCTYPE", "multipart/form-data"); 
      connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
      connection.setRequestProperty("uploaded_file",selectedFilePath); 

      //creating new dataoutputstream 
      dataOutputStream = new DataOutputStream(connection.getOutputStream()); 

      //writing bytes to data outputstream 
      dataOutputStream.writeBytes(twoHyphens + boundary + lineEnd); 
      dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" 
        + selectedFilePath + "\"" + lineEnd); 

      dataOutputStream.writeBytes(lineEnd); 

      //returns no. of bytes present in fileInputStream 
      bytesAvailable = fileInputStream.available(); 
      //selecting the buffer size as minimum of available bytes or 1 MB 
      bufferSize = Math.min(bytesAvailable,maxBufferSize); 
      //setting the buffer as byte array of size of bufferSize 
      buffer = new byte[bufferSize]; 

      //reads bytes from FileInputStream(from 0th index of buffer to buffersize) 
      bytesRead = fileInputStream.read(buffer,0,bufferSize); 

      //loop repeats till bytesRead = -1, i.e., no bytes are left to read 
      while (bytesRead > 0){ 
       //write the bytes read from inputstream 
       dataOutputStream.write(buffer,0,bufferSize); 
       bytesAvailable = fileInputStream.available(); 
       bufferSize = Math.min(bytesAvailable,maxBufferSize); 
       bytesRead = fileInputStream.read(buffer,0,bufferSize); 
      } 

      dataOutputStream.writeBytes(lineEnd); 
      dataOutputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

      serverResponseCode = connection.getResponseCode(); 
      String serverResponseMessage = connection.getResponseMessage(); 

      Log.i(TAG, "Server Response is: " + serverResponseMessage + ": " + serverResponseCode); 

      //response code of 200 indicates the server status OK 
      if(serverResponseCode == 200){ 
       getActivity().runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         tvFileName.setText("File Upload completed.\n\n You can see the uploaded file here: \n\n" + "http://coderefer.com/extras/uploads/"+ fileName); 
        } 
       }); 
      } 

      //closing the input and output streams 
      fileInputStream.close(); 
      dataOutputStream.flush(); 
      dataOutputStream.close(); 



     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      getActivity().runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        Toast.makeText(getActivity(),"File Not Found",Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
      Toast.makeText(getActivity(), "URL error!", Toast.LENGTH_SHORT).show(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
      Toast.makeText(getActivity(), "Cannot Read/Write File!", Toast.LENGTH_SHORT).show(); 
     } 
     dialog.dismiss(); 
     return serverResponseCode; 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode == Activity.RESULT_OK){ 
     if(requestCode == PICK_FILE_REQUEST){ 
      if(data == null){ 
       //no data present 
       return; 
      } 


      Uri selectedFileUri = data.getData(); 
      selectedFilePath = FilePath.getPath(this,selectedFileUri); 
      Log.i(TAG,"Selected File Path:" + selectedFilePath); 

      if(selectedFilePath != null && !selectedFilePath.equals("")){ 
       tvFileName.setText(selectedFilePath); 
      }else{ 
       Toast.makeText(getActivity(),"Cannot upload file to server",Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
} 

}

+0

グレート、それは仕事です。ありがとうございました:D –

関連する問題