java - Android 中图片上传到 Cloudinary 失败

标签 java android cloudinary image-upload

单击相机中的图像后,我尝试将图像上传到 Cloudinary。 相机工作正常,但单击图像后,应用程序一次又一次崩溃。尝试调试它,但没有得到我出错的地方。

LOGCAT:
beginning of crash
05-03 00:29:58.243 4880-4880/com.example.maaz.taxit E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.maaz.taxit, PID: 4880
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=null} to activity {com.example.maaz.taxit/com.example.maaz.taxit.ImageDeleteTest}: android.os.NetworkOnMainThreadException
        at android.app.ActivityThread.deliverResults(ActivityThread.java:3699)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)
        at android.app.ActivityThread.-wrap16(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
     Caused by: android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
        at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
        at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
        at java.net.InetAddress.getAllByName(InetAddress.java:215)
        at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
        at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188)
        at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)
        at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100)
        at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357)
        at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340)
        at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
        at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245)
        at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
        at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java)
        at com.cloudinary.android.MultipartUtility.<init>(MultipartUtility.java:52)
        at com.cloudinary.android.UploaderStrategy.callApi(UploaderStrategy.java:48)
        at com.cloudinary.Uploader.callApi(Uploader.java:22)
        at com.cloudinary.Uploader.upload(Uploader.java:55)
        at com.example.maaz.taxit.ImageDeleteTest.onActivityResult(ImageDeleteTest.java:63)
        at android.app.Activity.dispatchActivityResult(Activity.java:6428)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:3695)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 
        at android.app.ActivityThread.-wrap16(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5417) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

我尝试对示例图像 URL 进行硬编码,但仍然无法正常工作。 问题可能出在这条线上 cloudinary.uploader().upload(photoFile.getAbsolutePath(), ObjectUtils.emptyMap());

public static final int TAKE_PHOTO_REQUEST = 0;

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == TAKE_PHOTO_REQUEST) {
            if (resultCode == RESULT_OK) {
                //File to upload to cloudinary
                Toast.makeText(this, "Pakistan Zinabad", Toast.LENGTH_SHORT).show();
                Map config = new HashMap();
                config.put("cloud_name", "nomancloud");
                config.put("api_key", "myKey");
                config.put("api_secret", "mySecretApi");
                Cloudinary cloudinary = new Cloudinary(config);

                try {
                    cloudinary.uploader().upload(photoFile.getAbsolutePath(), ObjectUtils.emptyMap());
                } catch (IOException e) {
                    e.printStackTrace();
                }

            } else if (resultCode == RESULT_CANCELED) {
                // User cancelled the image capture
                //finish();
            }
        }

    }


    private File createImageFile() throws IOException {
        // Create an image file name

        String imageFileName = "capturedImage";
        File storageDir = Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES);
        File image = File.createTempFile(
                imageFileName,  /* prefix */
                ".jpg",         /* suffix */
                storageDir      /* directory */
        );

        // Save a file: path for use with ACTION_VIEW intents
        return image;
    }

 @Override
    public void onClick(View v) {

        Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        if (takePhotoIntent.resolveActivity(getPackageManager()) != null) {
        // Create the File where the photo should go
        photoFile = null;

        try {
        photoFile = createImageFile();
        }
        catch (IOException ex) {
        // Error occurred while creating the File
        }

        // Continue only if the File was successfully created
        if (photoFile != null) {
            takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.fromFile(photoFile));
            startActivityForResult(takePhotoIntent, TAKE_PHOTO_REQUEST);
            }
        }
    }

最佳答案

你可以尝试使用:

Map uploadResult = cloudinary.uploader().upload("http://res.cloudinary.com/demo/image/upload/sample.jpg", ObjectUtils.emptyMap());

并打印 RuntimeException/uploadResult?

关于java - Android 中图片上传到 Cloudinary 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55959111/

相关文章:

java - 无法更改 mvn 依赖项 :tree 中的输出格式

java - 处理许多请求 Web 服务

java - jpql (JPA) 中重复的父子数据

android - 自定义 CoordinatorLayout.Behavior 和 RecyclerView 滚动问题

javascript - 如何在 React 中实现 Cloudinary Upload Widget?

java - JPA 的 Servlet 字符编码问题

Android Geofence 在进入/退出时触发,没有错误,但没有 GEOFENCE TRANSITION 标志

android - 如何检测用户是否停止在 EditText android 中输入

ruby-on-rails - Carrierwave Cloudinary 图像上传有效,但上传后立即返回空值