رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

post کردن فایل همراه با اطلاعات دیگر به سرور در اندروید


پست های پیشنهاد شده

سلام دوستان

مخواستم یه کلاس بنویسم که یک فایل و یه سری داده ی رشته ای رو به وب سرویس ارسال کنم 

اینکه یک فایل رو به سرور آپلود کنم مشکلی نیس ولی اینکه همراه اون یه سری اطلاعات بفرستم نمیدونم چجوریه

لطفا اگه ممکنه یه راهنمایی کلی کنید ممنونم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال اطلاعات به وب سرویس و گرفتن جواب دوتا راه دارید

1- راه اصلی و طولانی ولی native

2- استفاده از Library

من خودم راه دوم رو استفاده میکنم.

میتونید از کتابخونه های AsyncHttpClinet، vollye و Retrofit استفاده کنید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در 7 دقیقه قبل، mehrdadmmb2 گفته است :

برای ارسال اطلاعات به وب سرویس و گرفتن جواب دوتا راه دارید

1- راه اصلی و طولانی ولی native

2- استفاده از Library

من خودم راه دوم رو استفاده میکنم.

میتونید از کتابخونه های AsyncHttpClinet، vollye و Retrofit استفاده کنید.

در روش ۲ چطور میتونم درصد ارسال اطلاعات رو در هر لحظه بگیرم( مثلا کتابخونه AsyncHttpClient)

لینک ارسال
به اشتراک گذاری در سایت های دیگر

میتونید از سروریس استفاده کنید و یه progressbar.

دیتا مدلش رو هم مینویسید و هر لحظه حجم دانلود شده رو پاس میدید به progressbar البته بر اساس بایت.

مثلا کد تابع دانلود تو سروریسش اینجوری میشه حدودا

void download(String url) {
        AsyncHttpClient client = new AsyncHttpClient();
        client.get(url, new FileAsyncHttpResponseHandler(this) {
            @Override
            public void onProgress(long bytesWritten, long totalSize) {
                super.onProgress(bytesWritten, totalSize);

                int percent = (int) ((bytesWritten * 100.0f) / totalSize);


                EventBus.getDefault().post(new DownloadModel("idm", percent));


                Log.d(TAG, "onProgress: " + bytesWritten + " from " + totalSize);
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, Throwable throwable, File file) {
                Toast.makeText(DownloaderService.this, "error in downloading file", Toast.LENGTH_SHORT).show();
                Log.d(TAG, "onFailure: " + throwable);
            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, File file) {
                Toast.makeText(DownloaderService.this, "file has been downloaded", Toast.LENGTH_SHORT).show();
                Log.d(TAG, "onSuccess: " + file.getAbsolutePath());
                //  stopSelf();
            }
        });
    }

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در 18 دقیقه قبل، mehrdadmmb2 گفته است :

میتونید از سروریس استفاده کنید و یه progressbar.

دیتا مدلش رو هم مینویسید و هر لحظه حجم دانلود شده رو پاس میدید به progressbar البته بر اساس بایت.

مثلا کد تابع دانلود تو سروریسش اینجوری میشه حدودا


void download(String url) {
        AsyncHttpClient client = new AsyncHttpClient();
        client.get(url, new FileAsyncHttpResponseHandler(this) {
            @Override
            public void onProgress(long bytesWritten, long totalSize) {
                super.onProgress(bytesWritten, totalSize);

                int percent = (int) ((bytesWritten * 100.0f) / totalSize);


                EventBus.getDefault().post(new DownloadModel("idm", percent));


                Log.d(TAG, "onProgress: " + bytesWritten + " from " + totalSize);
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, Throwable throwable, File file) {
                Toast.makeText(DownloaderService.this, "error in downloading file", Toast.LENGTH_SHORT).show();
                Log.d(TAG, "onFailure: " + throwable);
            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, File file) {
                Toast.makeText(DownloaderService.this, "file has been downloaded", Toast.LENGTH_SHORT).show();
                Log.d(TAG, "onSuccess: " + file.getAbsolutePath());
                //  stopSelf();
            }
        });
    }

 

بسیار ممنون❤

لینک ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

  • مطالب مشابه

    • توسط MaHdI-09
      سلام.
      من میخوام یک ویدئو رو به سرور ارسال کنم.اما هرچی آموزش دیدم جوری نبود که من دوتا داده و خود فیلم رو ارسال کنم به سرور.
      ممنون میشم راه حلی پیشنهاد بدید
       
    • توسط مهندس
      سلام دوستان
      من میخام با متد پست post تعدادی داده بفرستم ب سرور و میخام ریسپانسی که برام برمیگردونه یک json array باشه نه یک string.
      این داده هایی که باید فرستاده باشن باید به صورت json object باشن؟؟
      کسی تا حالا کار کرده ک راهنمایی کنه؟؟؟
    • توسط مهندس
      سلام دوستان.
      یکسری اطلاعات دارم در برنامه ک قراره ب سمت سرور ارسال بشه، از کتابخونه ی volley استفاده میکنم، اطلاعات با موفقیت در دیتابیس phpmyadmin ذخیره میشه، اما موقعی ک میخام  select where بگیرم ک چنین رکوردی  با فلان ستون و فلان اطلاعاتذخیره شده یا نه؟ برای بعضی از ستونها کوئری جواب داره ولی برای بعضی ستونها میگه null هست در حالیکه اون ستون مقدار داره، و وقتی خودم دستی در دیتابیس بهمون ستون مقدار میدم، کوئری مقدار برمیگردونه.
      این مشکلش چیه؟؟؟
      فکر نمیکنم مشکل از برنامه نویسی اندروید باشه.
      کدهای php رو ضمیمه کردم، لطفا راهنمایی کنید.
       
      <?php if($_SERVER['REQUEST_METHOD']=='POST'){ include "config.php"; $name=$_POST['name']; $code=$_POST['code']; $clas=$_POST['clas']; $day=$_POST['day']; $clock=$_POST['clock']; $college=$_POST['college']; $semester=$_POST['semester']; $year=$_POST['year']; $cycle=$_POST['cycle']; $mobile=$_POST['mobile']; mysqli_query($con,"SET CHARSET UTF8"); $sql="SELECT count(*) FROM tbl_lesson WHERE name_lesson='".$name."' and code_lesson='".$code."' and name_class='".$clas."' AND day='".$day."' AND clock='".$clock."' AND college='".$college."' AND semester='".$semester."' AND year='".$year."' AND cycle='".$cycle."' AND user_mobile='".$mobile."'"; file_put_contents('test.txt',$sql); $result= mysqli_query($con,$sql); $check=mysqli_fetch_array($result); if($check[0]>0){ echo 'This Lesson last Saved In Database'; } else{ $sql="insert into tbl_lesson (name_lesson,code_lesson, name_class, day, clock, college, semester, year,cycle,user_mobile) VALUES (' $name', '$code', '$clas', '$day', ' $clock', '$college', '$semester', ' $year','$cycle','$mobile')"; mysqli_query($con,"SET CHARSET UTF8"); if(mysqli_query($con,$sql)){ echo "Success Save"; } else{ echo "Failed Save"; } } } ?>  
    • توسط مهندس
      سلام دوستان.
      ببخشید من میخام داده هامو بسمت سرور بفرستم و بر اساس شماره موبایل و روز ک خود کاربر در اندروید وارد میکنه، یکسری اطلاعات select بشه و برای کاربر لیست بشه.گیری ک دارم اینه ک ارایه ای ک با جیسون ساخته میشه خالی هست.کدهای php و کدهای کلاس جاوا رو میزارم.
      لطفا راهنمایی کنید اشکال کارم کجاست.
      <?php include "config.php"; mysqli_query($con,"SET CHARSET UTF8"); $mobile=$_POST['user_mobile']; $day=$_POST['day']; $sql="SELECT `name_lesson`, `name_class`, `day`, `clock`, `college`, `cycle`, `user_mobile` FROM `tbl_lesson` WHERE user_mobile='$mobile' and day='$day'"; $result=$con->query($sql); $array_list=array(); $array=$result->fetch_all(MYSQLI_ASSOC); echo json_encode($array); ?> import android.app.ProgressDialog; import android.content.Context; import com.android.volley.DefaultRetryPolicy; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonArrayRequest; import com.android.volley.toolbox.Volley; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; import ir.Class.SaveID; import ir.DataModel.GetSetTodayLesson; import ir.DataModel.GetSetUser; import static ir.Server.AuthenticationServer.SH_PRE_REGISTRATION; public class CatshTodayLesson { Context context; ProgressDialog progressDialog; public CatshTodayLesson(Context context){ this.context=context; } public void getpost(final CatshTodayLesson.onpost onpost) { SaveID saveID = new SaveID(context,SH_PRE_REGISTRATION); String keymobile=saveID.getSharedValue(SaveID.MOBILE);//class of sharedprefrences for get user_mobile String day="چهارشنبه"; final String url="http://192.168.56.1/server/show_today_timesheet.php?user_mobile="+""+keymobile+"day="+day; JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { List<GetSetTodayLesson> data=new ArrayList<>(); for (int i=0;i<response.length();i++){ GetSetTodayLesson getSetTodayLesson=new GetSetTodayLesson(); try { JSONObject jsonObject=response.getJSONObject(i); getSetTodayLesson.setName_lesson(jsonObject.getString("name_lesson")); getSetTodayLesson.setClock(jsonObject.getString("clock")); getSetTodayLesson.setCollege(jsonObject.getString("college")); getSetTodayLesson.setName_class(jsonObject.getString("name_class")); getSetTodayLesson.setSycle(jsonObject.getString("cycle")); } catch (JSONException e) { e.printStackTrace(); } data.add(getSetTodayLesson); } onpost.onpost(data); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); jsonArrayRequest.setRetryPolicy(new DefaultRetryPolicy(10000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); Volley.newRequestQueue(context).add(jsonArrayRequest); } public interface onpost { void onpost(List<GetSetTodayLesson> data); } }  
    • توسط Majid Ebrahimi
      در این آموزش می خواهیم دانلود فایل در دیالوگ باکس با قابلیت لغو دانلود را برای شما آموزش دهیم ابتدا کد برنامه:
       
      import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; import android.app.Activity; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; public class DownloadActivity extends Activity { /** Called when the activity is first created. */ boolean isRun = false; ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); new DownloadFileFromURL().execute("http://hw14.asset.aparat.com/aparat-video/1d7288ace5ce9cc812f6cf5b99d2b8b62642090-360p__87605.mp4"); isRun = true; } private final class onCancelClick implements DialogInterface.OnClickListener { @Override public void onClick(DialogInterface arg0, int arg1) { isRun = false; } } class DownloadFileFromURL extends AsyncTask { private ProgressDialog pDialog; /** * Before starting background thread * Show Progress Bar Dialog * */ @SuppressWarnings("deprecation") @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(DownloadActivity.this); pDialog.setMessage("موسیقی مورد نظر در حال دانلود است..."); pDialog.setIndeterminate(false); pDialog.setMax(100); pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pDialog.setCancelable(false); pDialog.setButton("لغو", new onCancelClick()); pDialog.show(); } /** * Downloading file in background thread * */ @Override protected String doInBackground(String... f_url) { int count; try { URL url = new URL(f_url[0]); URLConnection conection = url.openConnection(); conection.connect(); // getting file length int lenghtOfFile = conection.getContentLength(); // input stream to read file - with 8k buffer InputStream input = new BufferedInputStream(url.openStream(), 8192); // Output stream to write file File f = new File("sdcard/ff.mp3"); OutputStream output = new FileOutputStream(f); byte data[] = new byte[1024]; long total = 0; while ((count = input.read(data)) != -1) { total += count; // publishing the progress.... // After this onProgressUpdate will be called publishProgress("" + (int) ((total * 100) / lenghtOfFile)); // writing data to file output.write(data, 0, count); if ( !isRun) { f.delete(); break; } } // flushing output output.flush(); // closing streams output.close(); input.close(); } catch (Exception e) { Log.e("Error: ", e.getMessage()); } return null; } @Override protected void onProgressUpdate(String... progress) { pDialog.setProgress(Integer.parseInt(progress[0])); } @SuppressWarnings("deprecation") @Override protected void onPostExecute(String file_url) { pDialog.dismiss(); } } }  
      همانطور که مشهود است از یک کلاس آسینک تسک استفاده شده برای دانلود فایل و پس از تنظیمات اولیه دیالوگ در متد onPreExecute در متد doInBackground کارهای اصلی انجام می شود. که فایل دانلود و در اس دی کارد نوشته یا ذخیره می شود اما قسمت مهم این کار متغیر isRun است که پس از هربار نوشتن چک می شود که آیا کاربر دانلود را متوقف کرده یا نه که اگر نکرده به دانلود ادامه دهد و اگر دکمه توقف توسط کاربرد زده شده دانلود را متوقف می کند.
      اما باید توجه داشته باشبید که پرمیشن های زیر را در فایل منیفست اضافه کنید.
       
      امیدوارم این آموزش راهنمای خوبی برای شما دوستان باشد.
  • فایل

×
×
  • اضافه کردن...