android – 循环逐个上传列表图像

android – 循环逐个上传列表图像,第1张

概述我想逐个上传多个图像,就像用户点击上传所有按钮一样,它必须从列表中可见的第一个图像开始,一旦第一个图像上传到服务器然后自动必须开始第二个上传但是之后一个或两个第二个间隔,对于列表中的所有可用图像都相同. 这是我的代码,允许我上传单张图片: – 用于上传单张图片的代码 // btnUpload holder.uploadImageButton.setOnClickListener(new V 我想逐个上传多个图像,就像用户点击上传所有按钮一样,它必须从列表中可见的第一个图像开始,一旦第一个图像上传到服务器然后自动必须开始第二个上传但是之后一个或两个第二个间隔,对于列表中的所有可用图像都相同.

这是我的代码,允许我上传单张图片: –

用于上传单张图片的代码

// btnUpload    holder.uploadImagebutton.setonClickListener(new VIEw.OnClickListener() {    public voID onClick(VIEw v) {        // Upload        startUpload(position);            }        });

我使用下面的代码,但它同时上传/同步所有图像,我的意思在一起,就像我在列表中有500个图像所以它上传所有500在一起,因此我在互联网连接断电时出现错误时间没有获得上传图像的准确状态!

private SparseBooleanArray flags = new SparseBooleanArray();    // At onClick,set all the flags to indicate that some data needs to be synced    Imagebutton buttonUploadAll = (Imagebutton) findVIEwByID(R.ID.sync_btn);    buttonUploadAll.setonClickListener(new OnClickListener() {        @OverrIDe        public voID onClick(VIEw arg0) {             for(int position=0; position<ListVIEw.getAdapter().getCount(); position++)             {                 flags.put(position,true);             }             // Calling this would ensure a call to getVIEw() on every             // visible child of the ListvIEw. That is where we will check if             // the data is to be synced and displayed or not             ((BaseAdapter) ListVIEw.getAdapter()).notifyDataSetChanged();             }          });      @OverrIDe      // In getVIEw of the ListvIEw's adapter      public VIEw getVIEw(int position,VIEw convertVIEw,VIEwGroup parent) {      // If this item is to be synced      if(flags.get(position)) {        startUpload();        // Mark as synced        flags.put(position,false);    }    // Rest of the method that draws the vIEw....}

这就是为什么我想逐个上传多个图像(以队列方式)

解决方法 我试着写一个服务,它将从共享的pref一个一个地上传图像:
注意:我hv硬编码这里的一些东西,如图像来自SD卡,所以路径是硬编码的,图像名称是硬编码的,所以PLZ适当地改变它并尝试下面的代码,我已经测试并为我工作

下面的代码包含服务,活动[上传按钮,列表视图],xmlLayout,PHP服务,它将在ftp上传图像.

活动:

public class MainActivity extends Activity {        SharedPreferences sharedPref;        SharedPreferences.Editor editor;        ListVIEw ListvIEw;        @OverrIDe        protected voID onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentVIEw(R.layout.activity_main);            sharedPref = getSharedPreferences("myfiles",MODE_PRIVATE);            editor = sharedPref.edit();            editor.putString("0","monika_pin.png");            editor.putString("1","monika_pin1.png");            editor.putString("2","monika_pin2.png");            editor.commit();            String[] arr = new String[] { "/mnt/sdcard/monika_pin.png","/mnt/sdcard/monika_pin1.png","/mnt/sdcard/monika_pin2.png" };            List<String> List = Arrays.asList(arr);            MyAdapter adapter = new MyAdapter(this,R.layout.Listitem_imv,List);            ListvIEw = (ListVIEw) findVIEwByID(R.ID.ListVIEw1);            ListvIEw.setAdapter(adapter);        }        class MyAdapter extends ArrayAdapter<String> {            List<String> mList;            LayoutInflater mInflater;            int mResource;            public MyAdapter(Context context,int resource,List<String> objects) {                super(context,resource,objects);                mResource = resource;                mInflater = getLayoutInflater();                mList = objects;            }            @OverrIDe            public VIEw getVIEw(int position,VIEwGroup parent) {                VIEw vIEw;                if (convertVIEw == null) {                    vIEw = mInflater.inflate(mResource,null);                } else {                    vIEw = convertVIEw;                }                ImageVIEw imageVIEw = (ImageVIEw) vIEw                        .findVIEwByID(R.ID.imageVIEw1);                TextVIEw textVIEw = (TextVIEw) vIEw.findVIEwByID(R.ID.textVIEw1);                imageVIEw.setTag(mList.get(position));// tag of imageVIEw == path to                                                        // image                new LoadImage(imageVIEw).execute();                textVIEw.setText(mList.get(position).toString());                return vIEw;            }        }        class LoadImage extends AsyncTask<Object,VoID,Bitmap> {            private ImageVIEw imv;            private String path;            public LoadImage(ImageVIEw imv) {                this.imv = imv;                this.path = imv.getTag().toString();            }            @OverrIDe            protected Bitmap doInBackground(Object... params) {                Bitmap bitmap = null;                // file file = new file(                // Environment.getExternalStorageDirectory().getabsolutePath() +                // path);                file file = new file(path);                if (file.exists()) {                    bitmap = BitmapFactory.decodefile(file.getabsolutePath());                }                return bitmap;            }            @OverrIDe            protected voID onPostExecute(Bitmap result) {                if (!imv.getTag().toString().equals(path)) {                    /*                     * The path is not same. This means that this image vIEw is                     * handled by some other async task. We don't do anything and                     * return.                     */                    return;                }                if (result != null && imv != null) {                    imv.setVisibility(VIEw.VISIBLE);                    imv.setimageBitmap(result);                } else {                    imv.setVisibility(VIEw.GONE);                }            }        }        public voID buttonClick(VIEw vIEw) {            Intent intent = new Intent(this,MyService.class);            startService(intent);        }    }

服务:

public class MyService extends Service {    SharedPreferences sharedPref;    SharedPreferences.Editor editor;    int serverResponseCode = 0;    String upLoadServerUri = null;    private static final String TAG = "com.example.ServiceExample";    @OverrIDe    public voID onCreate() {        Log.i(TAG,"Service onCreate");        sharedPref = getSharedPreferences("myfiles",MODE_PRIVATE);        /************* PHP script path ****************/        upLoadServerUri = "http://myserver/uploadimage.PHP";    }    @OverrIDe    public int onStartCommand(Intent intent,int flags,int startID) {        Log.i(TAG,"Service onStartCommand " + startID);        final int currentID = startID;        Runnable r = new Runnable() {            public voID run() {                for (int i = 0; i < 3; i++) {                    // long endTime = System.currentTimeMillis() + 10*1000;                    // while (System.currentTimeMillis() < endTime) {                    synchronized (this) {                        try {                            uploadfile(sharedPref.getString(i + "",""));                        } catch (Exception e) {                        }                    }                    // }                    Log.i(TAG,"Service running " + currentID);                }                stopSelf();            }        };        Thread t = new Thread(r);        t.start();        return Service.START_STICKY;    }    @OverrIDe    public IBinder onBind(Intent arg0) {        // Todo auto-generated method stub        Log.i(TAG,"Service onBind");        return null;    }    @OverrIDe    public voID onDestroy() {        Log.i(TAG,"Service onDestroy");    }    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(Environment.getExternalStorageDirectory(),sourcefileUri);        file sourcefile = new file(Environment.getExternalStorageDirectory()                .getabsolutePath() + "/" + filename);        if (!sourcefile.isfile()) {            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("uploaded_file",filename);                dos = new DataOutputStream(conn.getoutputStream());                dos.writeBytes(twoHyphens + boundary + lineEnd);                // dos.writeBytes("Content-disposition: form-data; name="uploaded_file";filename=""+ filename + """                // + lineEnd);                dos.writeBytes("Content-disposition: form-data; name=\"uploaded_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,bufferSize);                while (bytesRead > 0) {                    dos.write(buffer,bufferSize);                    bytesAvailable = fileinputStream.available();                    bufferSize = Math.min(bytesAvailable,maxBufferSize);                    bytesRead = fileinputStream.read(buffer,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) {                }                // close the streams //                fileinputStream.close();                dos.flush();                dos.close();            } catch (MalformedURLException ex) {                ex.printstacktrace();                Log.e("Upload file to server","error: " + ex.getMessage(),ex);            } catch (Exception e) {                e.printstacktrace();                Log.e("Upload file to server Exception","Exception : " + e.getMessage(),e);            }            return serverResponseCode;        } // End else block    }}

XmlLayout:

<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="com.example.service.MainActivity" >    <button        androID:ID="@+ID/button1"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:layout_alignParenttop="true"        androID:layout_centerHorizontal="true"        androID:onClick="buttonClick"        androID:text="button" />    <ListVIEw        androID:ID="@+ID/ListVIEw1"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:layout_below="@+ID/button1"        androID:layout_centerHorizontal="true" >    </ListVIEw></relativeLayout>

AndroIDManifest

<?xml version="1.0" enCoding="utf-8"?><manifest xmlns:androID="http://schemas.androID.com/apk/res/androID"    package="com.example.service"    androID:versionCode="1"    androID:versionname="1.0" >    <uses-sdk        androID:minSdkVersion="8"        androID:targetSdkVersion="21" />          <uses-permission androID:name="androID.permission.INTERNET"/>          <uses-permission androID:name="androID.permission.READ_EXTERNAL_STORAGE"/>    <application        androID:allowBackup="true"        androID:icon="@drawable/ic_launcher"        androID:label="@string/app_name"        >        <activity              androID:name=".MainActivity"            androID:label="@string/app_name" >            <intent-filter>                <action androID:name="androID.intent.action.MAIN" />                <category androID:name="androID.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <service androID:name=".MyService" />    </application></manifest>

PHP脚本:

<?PHP    $file_path = "uploads/";    $file_path = $file_path . basename( $_fileS['uploaded_file']['name']);    if(move_uploaded_file($_fileS['uploaded_file']['tmp_name'],$file_path)) {        echo "success";    } else{        echo "fail";    } ?>

注意:确定在ftp上创建此PHP文件的位置,创建一个名为upload的文件夹,其中将上载所有文件

如果您想下载完整的源代码 – > Source Code

总结

以上是内存溢出为你收集整理的android – 循环逐个上传列表图像全部内容,希望文章能够帮你解决android – 循环逐个上传列表图像所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1137388.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存