0

I am trying to get a file that I selected from my android device, I start the intent where I can select my files when a specific button is clicked in my popup window (the pasirinktiFaila button), then I try to look what was selected through Log.d(), but it shows me no results.

Here is my fragment class called KorepetitoriuiPatvirtintiMokiniai, it has the onActivityResult method.

public class KorepetitoriuiPatvirtintiMokiniai extends Fragment {

    private RecyclerView recyclerView;
    private ArrayList<KorepetitoriuiPatvirtintasMokinysKortele> arrayList;
    private KorepetitoriuiPatvirtintiMokiniaiCardAdapter adapter;
    private TextView emptyRecycler;

    public KorepetitoriuiPatvirtintiMokiniai() {
        // Required empty public constructor
    }

    public static KorepetitoriuiPatvirtintiMokiniai newInstance() {
        KorepetitoriuiPatvirtintiMokiniai fragment = new KorepetitoriuiPatvirtintiMokiniai();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_korepetitoriui_patvirtinti_mokiniai, container, false);

        recyclerView = view.findViewById(R.id.recyclerKorepetitoriuiPatvirtintiMokiniai);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this.getContext()));
        emptyRecycler = view.findViewById(R.id.neraMokiniuKorepetitoriui);

        arrayList = new ArrayList<KorepetitoriuiPatvirtintasMokinysKortele>();

        GautiPatvirtintusMokiniusTask task = new GautiPatvirtintusMokiniusTask(prisijungti.currentKorepetitorius.getId());
        task.execute();

        return view;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == 1 && resultCode == Activity.RESULT_OK) {
            Uri uri = data.getData();
            String path = uri.getPath();
            Log.d("file", path);
        }
    }

    public class GautiPatvirtintusMokiniusTask extends AsyncTask<Void, Void, Void> {
        private int korepetitoriausId;

        public GautiPatvirtintusMokiniusTask(int korepetitoriausId) {
            this.korepetitoriausId = korepetitoriausId;
        }

        @Override
        protected Void doInBackground(Void... voids) {
            try {
                URL url = new URL("http://192.168.0.104/PHPscriptai/gautiKorepetitoriuiPatvirtintusMokinius.php?korepetitoriaus_id=" + korepetitoriausId);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setRequestProperty("Accept", "application/json");

                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
                StringBuilder sb = new StringBuilder();
                String output;
                while ((output = br.readLine()) != null) {
                    sb.append(output);
                }
                conn.disconnect();

                String jsonString = sb.toString();
                JSONArray jsonArray = new JSONArray(jsonString);
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject obj = jsonArray.getJSONObject(i);
                    String vardasMokinio = obj.getString("pilnas_mokinio_vardas");
                    int mokinioId = obj.getInt("mokinio_id");

                    arrayList.add(new KorepetitoriuiPatvirtintasMokinysKortele(vardasMokinio, mokinioId));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            if (arrayList.isEmpty()) {
                emptyRecycler.setVisibility(View.VISIBLE);
                recyclerView.setVisibility(View.GONE);
            } else {
                emptyRecycler.setVisibility(View.GONE);
                recyclerView.setVisibility(View.VISIBLE);
                adapter = new KorepetitoriuiPatvirtintiMokiniaiCardAdapter(arrayList, getContext());
                recyclerView.setAdapter(adapter);
            }
        }
    }
}

My adapter class:

public class KorepetitoriuiPatvirtintiMokiniaiCardAdapter extends RecyclerView.Adapter<KorepetitoriuiPatvirtintiMokiniaiCardHolder> {

    private ArrayList<KorepetitoriuiPatvirtintasMokinysKortele> list;
    private Context context;
    private Dialog popup;

    public KorepetitoriuiPatvirtintiMokiniaiCardAdapter(ArrayList<KorepetitoriuiPatvirtintasMokinysKortele> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @NonNull
    @Override
    public KorepetitoriuiPatvirtintiMokiniaiCardHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.korepetitoriaus_mokinys_item, parent, false);

        return new KorepetitoriuiPatvirtintiMokiniaiCardHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull KorepetitoriuiPatvirtintiMokiniaiCardHolder holder, int position) {
        KorepetitoriuiPatvirtintasMokinysKortele sarasas = list.get(position);
        popup = new Dialog(context);

        KorepetitoriuiPatvirtintiMokiniaiCardHolder.mokinioVardas.setText(sarasas.getVardasMokinio());

        KorepetitoriuiPatvirtintiMokiniaiCardHolder.parasyti.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(context, susirasyti.class);
                intent.putExtra("dabartinis_id", prisijungti.currentKorepetitorius.getId());
                intent.putExtra("gavejas_id", sarasas.getMokinioId());
                context.startActivity(intent);
            }
        });

        KorepetitoriuiPatvirtintiMokiniaiCardHolder.pridetiMedziaga.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                View popupView = LayoutInflater.from(context).inflate(R.layout.popup_pasirinkti_faila, null);

                Button pasirinktiFaila = popupView.findViewById(R.id.pasirinktiFailaButton);
                Button uzdaryti = popupView.findViewById(R.id.uzdarytiIkeltiLanga);
                EditText pavadinimas = popupView.findViewById(R.id.pavadinimasPopup);
                Button ikeltiFaila = popupView.findViewById(R.id.ikeltiFaila);

                pasirinktiFaila.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                        intent.setType("*/*");
                        ((Activity) context).startActivityForResult(intent, 1);
                    }
                });

                ikeltiFaila.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        // TODO
                        // upload the file
                    }
                });

                uzdaryti.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        popup.dismiss();
                    }
                });

                popup = new Dialog(context);
                popup.setContentView(popupView);
                popup.show();
            }
        });
    }
    
    @Override
    public int getItemCount() {
        return list.size();
    }
}

My card holder class:

public class KorepetitoriuiPatvirtintiMokiniaiCardHolder extends RecyclerView.ViewHolder{
    
        public static TextView mokinioVardas;
        public static Button parasyti, pridetiMedziaga;
    
        public KorepetitoriuiPatvirtintiMokiniaiCardHolder(@NonNull View itemView) {
            super(itemView);
    
            mokinioVardas = itemView.findViewById(R.id.vardasKorteleMokinioPatvirtintas);
            parasyti = itemView.findViewById(R.id.korepetitoriusParasyti);
            pridetiMedziaga = itemView.findViewById(R.id.korepetitoriusPridetiMedziaga);
        }
    }

Am I doing something wrong?

Tried to get a file from my android device through a button click in my android app, and check if the selected file was actually selected by logging, got no results.

  • See if [this question](https://stackoverflow.com/questions/6147884/onactivityresult-is-not-being-called-in-fragment) helps. Also you should use the [results api](https://developer.android.com/training/basics/intents/result) instead. – dominicoder Apr 24 '23 at 00:04
  • The answer to the post dominicoder suggested is outdated. startActivityForResult is deprecated. Instead you should be registerforactivityresult. https://stackoverflow.com/questions/6147884/onactivityresult-is-not-being-called-in-fragment – JonR85 Apr 24 '23 at 00:13

1 Answers1

0

This will work. Make changes according to this.

public class MainActivity extends AppCompatActivity {

ActivityResultLauncher<Intent> launcher;

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

    Button btn = findViewById(R.id.button);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.setType("*/*");
            launcher.launch(intent);
        }
    });

    launcher = registerForActivityResult(
                    new ActivityResultContracts.StartActivityForResult(),
                    new ActivityResultCallback<ActivityResult>() {
                        @Override
                        public void onActivityResult(ActivityResult result) {
                            if(result.getResultCode() == Activity.RESULT_OK) {
                                    Intent data = result.getData();
                                    Uri uri = data.getData();
                                    String path = uri.getPath();
                                    Log.d("file", path);
                            }
                        }
                    }
    );

} }

Basically, I have used ActivityResultLauncher and registerForActivityResult() instead if the deprecated startActivityForResult(). And it works fine and I get the path of the file that I choose from the device.

Lakshmi
  • 92
  • 1
  • 7