Я пытаюсь создать onclicklistener, который будет вызывать функцию из другого класса - PullRequest
0 голосов
/ 24 января 2019

Функция затем отправит объект json в базу данных с помощью API, но кажется, что Volley.newRequestQueue (this); является нулевым значением это дает мне эту ошибку: E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.kevin.barcodescanner, PID: 11301 java.lang.NullPointerException: попытка вызвать виртуальный метод 'com.android.volley.Request com.android.volley.RequestQueue.add (com.android.volley.Request)' для ссылки на пустой объект в com.example.kevin.barcodescanner.AddToCart.jsonParse (AddToCart.java:59) на com.example.kevin.barcodescanner.MainActivity $ 2.onClick (MainActivity.java:49) на android.view.View.performClick (View.java:6597) на android.view.View.performClickInternal (View.java:6574) на android.view.View.access $ 3100 (View.java:778) на android.view.View $ PerformClick.run (View.java:25885) на android.os.Handler.handleCallback (Handler.java:873) на android.os.Handler.dispatchMessage (Handler.java:99) на android.os.Looper.loop (Looper.java:193) на android.app.ActivityThread.main (ActivityThread.java:6669) в java.lang.reflect.Method.invoke (родной метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:493) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)

открытый класс MainActivity расширяет AppCompatActivity {

public static TextView resultTextView;
Button scan_btn, add_btn;

AddToCart add = new AddToCart();


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


    resultTextView = (TextView)findViewById(R.id.result_text);
    scan_btn = (Button)findViewById(R.id.btn_scan);
    add_btn =(Button)findViewById(R.id.add_btn);



    scan_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(getApplicationContext(), ScanCodeActivity.class));
        }
    });

    add_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            add.jsonParse();
        }
    });
}

}

открытый класс AddToCart расширяет AppCompatActivity {

private RequestQueue mQueue;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mQueue = Volley.newRequestQueue(this);
}

public void jsonParse() {

    JSONObject json = new JSONObject();
    try {

        json.put("id","11111111111");
        json.put("name","222222222222");
        json.put("price","1");

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


    String url = "https://fg3qzgb2va.asdasdasdasdas-api.ap-southeast-1.amazonaws.com/sample";
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, json,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    System.out.print("String Response : "+ response.toString());
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });
    jsonObjectRequest.setTag("VACTIVITY");
    mQueue.add(jsonObjectRequest);
}

}

1 Ответ

0 голосов
/ 24 января 2019

Дело в том, что поскольку AddToCart на самом деле не является активностью, метод oncreate никогда не вызывался, поскольку отображать нечего.Лучшим решением было бы проанализировать контекст из MainActivity в AddToCart через конструктор и создать экземпляр вашей очереди в конструкторе

public class AddToCart  {
private RequestQueue mQueue;
   public AddToCart(Context context) {
        super.onCreate(savedInstanceState);
        mQueue = Volley.newRequestQueue(context);
    }

    public void jsonParse() {

        JSONObject json = new JSONObject();
        try {

            json.put("id","11111111111");
            json.put("name","222222222222");
            json.put("price","1");

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


        String url = "https://fg3qzgb2va.asdasdasdasdas-api.ap-southeast-1.amazonaws.com/sample";
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, json,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        System.out.print("String Response : "+ response.toString());
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });
        jsonObjectRequest.setTag("VACTIVITY");
        mQueue.add(jsonObjectRequest);
    }
}
...