Android Java - is not public in class; cannot be accessed from outside package

Android Java - is not public in class; cannot be accessed from outside package

Vývoj android java aplikací - jak se vypořádat s chybou ... is not public in VolleyMultipartRequest; cannot be accessed from outside package, která nastane, když nemá třída explicitně nastavené vlastnictví a stane se z ní tzv. package-private.

 

Chyba

error: VolleyMultipartRequest.DataPart is not public in VolleyMultipartRequest; cannot be accessed from outside package protected Map<String, DataPart> getByteData() {

 

Příklad: Konstukce ve VolleyMultipartRequest

Třída DataPart nemá nastavené vlastnictví a je proto package-private

class DataPart {
        private String fileName;
        private byte[] content;
        private String type;

        public DataPart() {  }

        DataPart(String name, byte[] data) {
            fileName = name;
            content = data;
        }

 

Řešení

Nastavit třídě Datapart explicitně public

  public class DataPart {
        private String fileName;
        private byte[] content;
        private String type;

        public DataPart() {  }

        public DataPart(String name, byte[] data) {
            fileName = name;
            content = data;
        }

Jak se ti článek líbil?

Komentáře (2)

OL3G
Ahoj,

musim se s vámi podělit s touto chybou na kterou jsem narazil při vývoji android aplikace, protože i ChatGPT mně neporadil. Mám třídu mimo Activity a potřebuji spustit intent. Bohužel to neustále vyhazovalo dokola chybu "null object reference" viz níže.

Požadovaný kód:
---------------------------------------
Intent intent = new Intent(view.getContext(), HomeActivity.class);
startActivity(intent);

Chyba:
---------------------------------------
FATAL EXCEPTION: main
Process: cz.warehouse, PID: 8874
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
at android.app.Activity.startActivityForResult
....

Řešení je:
---------------------------------------
Intent intent = new Intent(view.getContext(), HomeActivity.class);
view.getContext().startActivity(intent);

Není zač :-)
OL3G
Ahoj,

narazil jsem na další jobovku při vývoji android aplikace v javě.

Chyba
------------------------------------
java.lang.ClassCastException: android.app.Application cannot be cast to cz.ol3g.warehouse.WarehouseCheckActivity

Kód
------------------------
Ve WarehouseCheckActivity volám:

new WarehouseCheck(WarehouseCheckActivity.this, getApplicationContext(), view).warehouseCheckButtonListener(warehouseCheckId, itemsCount);

a pak
new ApiSimpleRequest(context, view).saveWarehouseCheck(barcodeValue, warehouseCheckId, checkboxToPrintValue);



fix (řešení je)
---------------------------------------
Chyba je způsobena tím, že getApplicationContext() vrací instanci Application třídy, nikoliv Activity. Pokud potřebujete aktivitu, použijte this nebo WarehouseCheckActivity.this.

Takže final
new WarehouseCheck(WarehouseCheckActivity.this, this, view).warehouseCheckButtonListener(warehouseCheckId, itemsCount);

Přidat komentář