Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中使用ion库将文件(多部分/表单数据)上载到服务器失败_Java_C#_Android_Ion - Fatal编程技术网

Java 在Android中使用ion库将文件(多部分/表单数据)上载到服务器失败

Java 在Android中使用ion库将文件(多部分/表单数据)上载到服务器失败,java,c#,android,ion,Java,C#,Android,Ion,我是android新手,正在尝试使用ion library将文件上传到服务器 但是文件崩溃了。有了这个错误 FATAL EXCEPTION: Thread-55725 Process: transitions.com.example.huzy_kamz.interview, PID: 4635

我是android新手,正在尝试使用ion library将文件上传到服务器 但是文件崩溃了。有了这个错误

FATAL EXCEPTION: Thread-55725
                                                                                           Process: transitions.com.example.huzy_kamz.interview, PID: 4635
                                                                                           java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
                                                                                               at android.os.Handler.<init>(Handler.java:209)
                                                                                               at android.os.Handler.<init>(Handler.java:123)
                                                                                               at android.app.Dialog.<init>(Dialog.java:122)
                                                                                               at android.app.AlertDialog.<init>(AlertDialog.java:200)
                                                                                               at android.app.AlertDialog.<init>(AlertDialog.java:196)
                                                                                               at android.app.AlertDialog.<init>(AlertDialog.java:141)
                                                                                               at android.app.ProgressDialog.<init>(ProgressDialog.java:77)
                                                                                               at transitions.com.example.huzy_kamz.interview.MainActivity.uploadFile(MainActivity.java:131)
                                                                                               at transitions.com.example.huzy_kamz.interview.MainActivity$2$1.run(MainActivity.java:66)
                                                                                               at java.lang.Thread.run(Thread.java:818)

从调用链中删除线程,因为Ion为您管理该线程,并且您的异常与Ion FYI无关

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(selectedFilePath != null){
                dialog = ProgressDialog.show(MainActivity.this,"","Uploading File...",true);
                        uploadFile(selectedFilePath);
                      //  OnSendFileInfo();
            }else{
                Toast.makeText(MainActivity.this,"Please choose a File First",Toast.LENGTH_SHORT).show();
            }
        }
    });

您不能在非Ui线程中使用视图。正如我看到的,您正在上传方法中创建一个进度对话框,该对话框被线程调用。该代码应该只在主线程中

我发现了一种简单的方法,可以通过上传进度条上传或发布多部分/表单数据。也许这会有帮助

假设您的服务器正在等待以下数据:

1.文件PDF、图像、音频、视频等

2.姓名

3.电子邮件

4.地址

如果你想在一个URL中上传一次信息,无论是绝对URL还是相对URL,ion library在这方面都很简单、精确、高效,而且更好

步骤1:

声明您的URI

步骤2:

然后从你的图库中选择文件,这里是你的选择。你可以确定你想要用户查看的任何类型的文件,我在这里我已经确定了一个PDF文件。 在这一行intent.setTypeapplication/pdf

然后,您可以在按钮中调用showFileChooser,单击以访问您的多媒体资料

步骤3:

创建包含离子库的上载方法以启动作业。如果你在这个方法中看到,我首先声明了文件,名称,电子邮件,地址,对于文件,它获取了所选文件或路径文件的URI数据,然后名称,电子邮件,地址,它从EditText获取数据,你必须声明EditText来获取数据

b然后确定你想在发布我的信息时使用的URL是URL。但是,请确保在加载部分包含POST。loadPOST,url。 然后使用.setMultipartFileFile、file设置文件,并通过设置MultipartParameter.setMultipartParameterName、name等设置其余参数

public void Upload() {

        String file= FilePath.getPath(this, filePath);
        final String name = name_edt.getText().toString();
        final String email = email_edt.getText().toString();
        final String address = address_edt.getText().toString();
        

        final ProgressDialog pd;
        pd = new ProgressDialog(MainActivity.this);
        pd.setMessage("Logging in...");
        pd.setCancelable(false);
        pd.show();
        final String url_ = "xxxxxxxxxxxxxxx";

        final File file = new File(Uri.parse(path).toString());



        Ion.with(MainActivity.this)
                .load("POST",url_)
                .progressDialog(pd)
                .setMultipartFile("file", file)
                .setMultipartParameter("Name", name)
                .setMultipartParameter("Email", email)
                .setMultipartParameter("Address.", address)
               
                .asString()
                .setCallback(new FutureCallback<String>() {
                    @Override
                    public void onCompleted(Exception e, String result) {


                        //     Toast.makeText(getApplicationContext(),""+file,Toast.LENGTH_LONG).show();

                        System.out.println("Error " + e);
                       // Toast.makeText(getApplicationContext(), "Exception : " + e, Toast.LENGTH_LONG).show();
                        Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();
                        // Toast.makeText(getApplicationContext(),""+e,Toast.LENGTH_LONG).show();


                        pd.dismiss();


                    }
                });
    }
然后你就可以走了,根据你的C API,该文件将能够保存在文件夹中。即使其他人使用Php或任何其他语言,您也可以创建自己的Api将文件保存在服务器文件夹中


希望它能正常工作。

检查您选择的文件路径是否存在。i、 e如果文件存在或不存在。如果文件不存在,Ion将抛出异常。您尝试在后台线程中显示对话框;从线程调用的上载文件。看看AsyncTask:是的,我在TextView@ADM中检查了它,它显示了路径,但可能是我在离子代码中的某个地方出错了,请帮我检查一下,这有点棘手thanks@0xDEADC0DE,是的,它确实显示了一个对话框,几分钟后它崩溃并导致错误。@ADM,看起来你知道离子结构,请帮我实现这一点谢谢你的回答,它不再崩溃,但我敬酒,现在它显示为空,是因为我的离子结构,它似乎看不到文件路径,它在文本视图中可见为什么你必须从中检查。为什么在多部分参数中使用application/zip。上载图像文件时。首先阅读文档我应该使用什么,假设我想选择一个pdf文件,请帮助我了解@admrefere的内容类型。
 public void FileSave(HttpPostedFile file)
    {

        try
        {
            if (file.ContentLength > 0)
            {
                var fileName = Path.GetFileName(file.FileName);
                var path = Path.Combine(Server.MapPath("~/FileStorage"), fileName);
                file.SaveAs(path);
            }

            Response.Write("Upload successfull");

        }
        catch
        {
            Response.Write("An Error Ocurred");

        }
    }
button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(selectedFilePath != null){
                dialog = ProgressDialog.show(MainActivity.this,"","Uploading File...",true);
                        uploadFile(selectedFilePath);
                      //  OnSendFileInfo();
            }else{
                Toast.makeText(MainActivity.this,"Please choose a File First",Toast.LENGTH_SHORT).show();
            }
        }
    });
private Uri filePath;
private void showFileChooser() {
        Intent intent = new Intent();
        intent.setType("application/pdf");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Pdf"), PICK_PDF_REQUEST);
    }

    //handling the image chooser activity result
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == PICK_PDF_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
            filePath = data.getData();

            Toast.makeText(getApplicationContext(), "" + filePath, Toast.LENGTH_LONG).show();
        }
    }
public void Upload() {

        String file= FilePath.getPath(this, filePath);
        final String name = name_edt.getText().toString();
        final String email = email_edt.getText().toString();
        final String address = address_edt.getText().toString();
        

        final ProgressDialog pd;
        pd = new ProgressDialog(MainActivity.this);
        pd.setMessage("Logging in...");
        pd.setCancelable(false);
        pd.show();
        final String url_ = "xxxxxxxxxxxxxxx";

        final File file = new File(Uri.parse(path).toString());



        Ion.with(MainActivity.this)
                .load("POST",url_)
                .progressDialog(pd)
                .setMultipartFile("file", file)
                .setMultipartParameter("Name", name)
                .setMultipartParameter("Email", email)
                .setMultipartParameter("Address.", address)
               
                .asString()
                .setCallback(new FutureCallback<String>() {
                    @Override
                    public void onCompleted(Exception e, String result) {


                        //     Toast.makeText(getApplicationContext(),""+file,Toast.LENGTH_LONG).show();

                        System.out.println("Error " + e);
                       // Toast.makeText(getApplicationContext(), "Exception : " + e, Toast.LENGTH_LONG).show();
                        Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();
                        // Toast.makeText(getApplicationContext(),""+e,Toast.LENGTH_LONG).show();


                        pd.dismiss();


                    }
                });
    }