Попытайтесь вызвать виртуальный метод 'int java .lang.String.length ()' для нулевой ссылки на объект, даже если этот объект не является нулевым, и инициализируйте - PullRequest
0 голосов
/ 21 апреля 2020

Я знаю, что вопрос задавался много раз, но я действительно не нашел решения. я знаю, что ошибка приходит, потому что объект намерен ноль, но как? если я выберу картину из галереи? это ошибка, которую я получаю

    E/Volley: [497] NetworkDispatcher.processRequest: Unhandled exception java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
    java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
        at java.net.URLEncoder.encode(URLEncoder.java:205)
        at com.android.volley.Request.encodeParameters(Request.java:491)
        at com.android.volley.Request.getBody(Request.java:477)
        at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:245)
        at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:219)
        at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:97)
        at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:131)
        at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:120)
        at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:87)
D/EGL_emulation: eglMakeCurrent: 0xa7685060: ver 3 1 (tinfo 0xa7683280)
D/EGL_emulation: eglMakeCurrent: 0xa7685060: ver 3 1 (tinfo 0xa7683280)

это моя часть объекта намерения:

btnSelectImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Dexter.withActivity(uploadimage.this).withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
                    .withListener(new PermissionListener() {
                        @Override
                        public void onPermissionGranted(PermissionGrantedResponse response) {
                            Intent intent = new Intent(Intent.ACTION_PICK);
                            intent.setType("image/*");
                            startActivityForResult(Intent.createChooser(intent,"Select image"),1);
                        }

когда я пришел к этой части кода, его падение, намерение couse равно null? но почему так?

 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    if(requestCode==1 && requestCode==RESULT_OK && data!= null){
        Uri filePath = data.getData();
        try {
            InputStream inputStream = getContentResolver().openInputStream(filePath);
            bitmap = BitmapFactory.decodeStream(inputStream);
            imageView.setImageBitmap(bitmap);
            imageStore(bitmap);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }
    super.onActivityResult(requestCode, resultCode, data);

}

в чем может быть проблема? я добавляю, чтобы манифестировать разрешение READ_EXTERNAL_STORAGE.

это весь мой код, если он уместен.

    package com.example.yacovapp;
import android.Manifest;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.android.volley.toolbox.StringRequest;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.Volley;
import com.karumi.dexter.Dexter;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionDeniedResponse;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.single.PermissionListener;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import android.util.Base64;

public class uploadimage extends AppCompatActivity {

    Button btnSelectImage, btnUploadImage;
    ImageView imageView;
    Bitmap bitmap;
    String encodedImage;

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

        btnSelectImage = (Button) findViewById(R.id.btnSelectImage);
        btnUploadImage = (Button) findViewById(R.id.buttonUploadImage);
        imageView = findViewById(R.id.imView);

        btnSelectImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Dexter.withActivity(uploadimage.this).withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
                        .withListener(new PermissionListener() {
                            @Override
                            public void onPermissionGranted(PermissionGrantedResponse response) {
                                Intent intent = new Intent(Intent.ACTION_PICK);
                                intent.setType("image/*");
                                startActivityForResult(Intent.createChooser(intent,"Select image"),1);
                            }
                            @Override
                            public void onPermissionDenied(PermissionDeniedResponse response) { }

                            @Override
                            public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) { }
                        }).check();
            }
        });

        btnUploadImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                StringRequest request = new StringRequest(Request.Method.POST, "https://kerron.xyz/htdocs/images.php"
                        , new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Toast.makeText(uploadimage.this, response, Toast.LENGTH_SHORT).show();
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(uploadimage.this, error.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                }){
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        Map <String, String> param = new HashMap<>();
                        param.put("image", encodedImage);
                        return param;
                    }
                };
                RequestQueue requestQueue = Volley.newRequestQueue(uploadimage.this);
                requestQueue.add(request);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if(requestCode==1 && requestCode==RESULT_OK && data!= null){
            Uri filePath = data.getData();
            try {
                InputStream inputStream = getContentResolver().openInputStream(filePath);
                bitmap = BitmapFactory.decodeStream(inputStream);
                imageView.setImageBitmap(bitmap);
                imageStore(bitmap);

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

        }
        super.onActivityResult(requestCode, resultCode, data);

    }

    private void imageStore(Bitmap bitmap) {
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);

        byte [] imageBytes = stream.toByteArray();
        encodedImage = android.util.Base64.encodeToString(imageBytes,Base64.DEFAULT);
    }
}

php file: (на сервере в папке public_ html я создаю папку htdocs и в этой папке у меня есть все мои php файлы проекта)

    <?php
$conn = mysqli_connect("78.140.191.36","kerronxy_yacov", "]k2oIl?WBRPh", "kerronxy_users");

if(isset($_POST['image'])) {

    $target_dir = "htdocs/";
    $image = $_POST['image'];
    $imageStore = rand()."_".time()."jpeg";
    $target_dir = $target_dir."/".$imageStore;
    file_put_contents($target_dir, base64_decode($image));

    $select = "INSERT INTO images (image) VALUES ($imageStore)";
    $responce = mysqli_query($conn, $select);

    if($responce) {
echo "Image Uploaded";
mysqli_close($conn);
    }

}

1 Ответ

0 голосов
/ 21 апреля 2020

Ошибка Logcat указывает Nullpointer exception означает, что некоторые переменные имеют нулевое значение во время выполнения. Возможно, вы указали какое-либо значение null или ключ в параметрах вашего сообщения. Пожалуйста, убедитесь, что ваш postParams в вашем случае encodedImage не равен нулю до вызова запроса, потому что ключи или значения, возвращаемые этими методами , не должны быть нулевым .

Надеюсь, это поможет ..

...