Получение данных по назначению с ошибкой только в одном действии - PullRequest
3 голосов
/ 08 ноября 2019

Я пытаюсь передать намерение от адаптера и получить его в своей деятельности.

Когда я делаю это каждый раз, и он входит в else условие .

Это не получает значение , и я не знаю почему. Когда я пытаюсь использовать тот же код в любом другом действии itработал отлично, но в этом упражнении он всегда дает null значение в намерении.

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

Мой класс адаптера:

holder.getSurvey.setOnClickListener(new View.OnClickListener() {
   @Override
        public void onClick(View v) {
            Intent intent = new Intent(context,AuthorMainScreen.class);
            intent.putExtra("work", "getting");
            context.startActivity(intent);
        }

Мой AuthorMainScreen Упражнение:

  public class AuthorMainScreen extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    Button newSurveyBtn, surveyWithRef, surveyResult;
    ArrayList<JSONObject> jsonObjects = new ArrayList<JSONObject>();

    public static TextView textView;
    DatabaseReference databaseReference, surveyReference;

    String referenceNo, loggedInUserId;
    AlertDialog dialog;
    ProgressDialog progressDialog;
    DrawerLayout drawerLayout;
    NavigationView navigationView;
    LinearLayout linearLayout;
    FirebaseAuth firebaseAuth;
    TextView headerEmailView, rateOk;
    Button headerLogout;
    EditText reference;


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

        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Processing your request...");


        viewDeclaration();

        clickFunctionalities();


        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawerLayout, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawerLayout.setDrawerListener(toggle);
        toggle.syncState();
//        drawerLayout.addDrawerListener(actionBarDrawerToggle);
        navigationView.setNavigationItemSelectedListener(this);

    }


    private void clickFunctionalities() {
        newSurveyBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                surveyTitleDialog();
            }
        });

        surveyWithRef.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                referenceDialog();
                rateOk.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        referenceNo = reference.getText().toString().trim();

                        if (!referenceNo.isEmpty()) {
                            progressDialog.show();
                            getSurvey();
                            dialog.dismiss();
                        } else {
                            progressDialog.dismiss();
                            reference.setError("Reference # is required");
                        }
                    }
                });

            }
        });
        surveyResult.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                referenceDialog();
                rateOk.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        referenceNo = reference.getText().toString().trim();

                        if (!referenceNo.isEmpty()) {
                            progressDialog.show();
                            getSurveyResultFile();
                            dialog.dismiss();
                        } else {
                            progressDialog.dismiss();
                            reference.setError("Reference # is required");
                        }
                    }
                });

            }
        });


        linearLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
                    drawerLayout.closeDrawer(GravityCompat.START);
                } else {
                    drawerLayout.openDrawer(GravityCompat.START);
                }
            }
        });
        headerLogout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FirebaseAuth.getInstance().signOut();
                Intent intent = new Intent(AuthorMainScreen.this, LoginSignupActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }

    private void surveyTitleDialog() {

        final AlertDialog.Builder textBuilder = new AlertDialog.Builder(this);

        LayoutInflater inflater = this.getLayoutInflater();
        View view = inflater.inflate(R.layout.survey_name_dialog, null);

        final EditText surveyName = view.findViewById(R.id.edt_set_survey_name);
        TextView ok = view.findViewById(R.id.survey_name_btn);

        ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String surveyTitleName = surveyName.getText().toString().trim();
                if (!surveyTitleName.equals("")) {
                    dialog.dismiss();
                    Intent intent = new Intent(AuthorMainScreen.this, MakeSurvey.class);
                    intent.putExtra("surveyname", surveyTitleName);
                    Toast.makeText(AuthorMainScreen.this, surveyTitleName, Toast.LENGTH_SHORT).show();
                    startActivity(intent);

                } else {
                    surveyName.setError("Title is Required");
                }

            }
        });

        TextView cancelBtn = view.findViewById(R.id.dismiss_dialog);
        cancelBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();

            }
        });

        textBuilder.setView(view);
        dialog = textBuilder.create();
        dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        dialog.show();
        Window window = dialog.getWindow();
        window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        dialog.setCancelable(false);

    }

    private void getSurvey() {

        surveyReference = FirebaseDatabase.getInstance().getReference().child(Constants.content).child(Constants.survey).child(referenceNo);
        surveyReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                System.out.println(dataSnapshot);

                if (dataSnapshot.hasChildren()) {
                    progressDialog.dismiss();
                    Intent intent = new Intent(getApplicationContext(), GetSurveys.class);
                    intent.putExtra(Constants.ref_no, referenceNo);
                    startActivity(intent);
                } else {
                    progressDialog.dismiss();

                    Toast.makeText(getApplicationContext(), "Reference number is not valid !!!", Toast.LENGTH_LONG).show();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                progressDialog.dismiss();

                Toast.makeText(getApplicationContext(), "Something went wrong!!!", Toast.LENGTH_SHORT).show();

            }
        });


    }

    public void getSurveyResultFile() {
        databaseReference = FirebaseDatabase.getInstance().getReference().child(Constants.content).child(Constants.Answers).child(loggedInUserId).child(referenceNo);

        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    progressDialog.dismiss();

                    JSONArray dataSnapshotArray = new JSONArray();
                    JSONArray dataSnapshotChildrenArray;
                    JSONObject dataSnapshotChildrenAnswer;
                    JSONArray dataSnapshotChildrenAnswerValues;

                    for (DataSnapshot ds : dataSnapshot.getChildren()) {
                        System.out.println("sdsd" + ds);
                        dataSnapshotChildrenArray = new JSONArray();
                        ArrayList<Object> list = (ArrayList<Object>) ds.getValue();
                        for (int i = 0; i < list.size(); i++) {
                            HashMap<String, Object> map = (HashMap<String, Object>) list.get(i);
                            Iterator<Map.Entry<String, Object>> finalIterator = map.entrySet().iterator();

                            dataSnapshotChildrenAnswer = new JSONObject();
                            while (finalIterator.hasNext()) {
                                Map.Entry<String, Object> entry = finalIterator.next();
                                Object value = entry.getValue();
                                String key = entry.getKey();
                                try {
                                    dataSnapshotChildrenAnswer.put(key, value);
                                    if (value instanceof ArrayList) {
                                        dataSnapshotChildrenAnswerValues = new JSONArray();
                                        ArrayList<String> answers = (ArrayList<String>) value;
                                        for (int j = 0; j < answers.size(); j++) {
                                            dataSnapshotChildrenAnswerValues.put(answers.get(j));
                                        }
                                        dataSnapshotChildrenAnswer.put(key, dataSnapshotChildrenAnswerValues);
                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
                            dataSnapshotChildrenArray.put(dataSnapshotChildrenAnswer);
                        }
                        dataSnapshotArray.put(dataSnapshotChildrenArray);
                        System.out.println("jso  " + dataSnapshotArray);
                    }
                    try {
                        saveCsv(dataSnapshotArray);
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                } else {
                    Toast.makeText(AuthorMainScreen.this, "Sorry!!user or survey not found.", Toast.LENGTH_LONG).show();
                    progressDialog.dismiss();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });

    }

    public void saveCsv(JSONArray outerArray) throws IOException, JSONException {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            }
        }

        String fileName = referenceNo + " Result";
        String rootPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/test/";
        File dir = new File(rootPath);
        if (!dir.exists()) {
            dir.mkdir();
        }
        File file = null;
        file = new File(rootPath, fileName);
        if (!file.exists()) {
            progressDialog.dismiss();
            file.createNewFile();
        }
        if (file.exists()) {
            progressDialog.dismiss();
            CSVWriter writer = new CSVWriter(new FileWriter(file), ',');
            for (int i = 0; i < outerArray.length(); i++) {
                JSONArray innerJsonArray = (JSONArray) outerArray.getJSONArray(i);
                for (int k = 0; k < innerJsonArray.length(); k++) {
                    String[][] arrayOfArrays = new String[innerJsonArray.length()][];
                    JSONObject innerJsonObject = (JSONObject) innerJsonArray.getJSONObject(k);
                    String[] stringArray1 = new String[innerJsonObject.length()];
//                   stringArray1[0]= (String) innerJsonObject.getString("type");
                    stringArray1[1] = "Questions";
                    stringArray1[2] = "Answers";
                    stringArray1[1] = (String) innerJsonObject.getString("title");
                    stringArray1[2] = "";
                    JSONArray jsonArray = (JSONArray) innerJsonObject.getJSONArray("answer");
                    for (int j = 0; j < jsonArray.length(); j++) {
                        stringArray1[2] += jsonArray.get(j).toString();
                        stringArray1[2] += ",";
                    }

                    arrayOfArrays[k] = stringArray1;
                    writer.writeNext(arrayOfArrays[k]);
                    System.out.println("aa " + Arrays.toString(arrayOfArrays[k]));

                }
            }

            writer.close();
            Toast.makeText(this, fileName + " is been saved at " + rootPath, Toast.LENGTH_LONG).show();
        }
    }

    public void referenceDialog() {

        final AlertDialog.Builder rateBuilder = new AlertDialog.Builder(this);

        LayoutInflater inflater = this.getLayoutInflater();
        View view = inflater.inflate(R.layout.survey_refno_dialog, null);

        reference = view.findViewById(R.id.edt_survey_ref_no);
        rateOk = view.findViewById(R.id.ref_btnOk);
        TextView rateCancel = view.findViewById(R.id.ref_btnCancel);

        rateBuilder.setView(view);

        rateCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });
        dialog = rateBuilder.create();
        dialog.show();
        Window rateWindow = dialog.getWindow();
        rateWindow.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        dialog.setCancelable(false);
    }

    private void viewDeclaration() {
        newSurveyBtn = findViewById(R.id.new_surveys_button);
        surveyWithRef = findViewById(R.id.get_survey_button);
        surveyResult = findViewById(R.id.analyze_survey);
        linearLayout = findViewById(R.id.hamburg_icon_layout);
        drawerLayout = findViewById(R.id.drawer_layout);
        navigationView = findViewById(R.id.navigation_view);
        View view = navigationView.getHeaderView(0);
        headerEmailView = view.findViewById(R.id.header_email);
        headerLogout = findViewById(R.id.nav_logout);

        firebaseAuth = FirebaseAuth.getInstance();
        if (firebaseAuth.getCurrentUser() != null) {
            String userEmail = firebaseAuth.getCurrentUser().getEmail();
            headerEmailView.setText(userEmail);
        }

        if (firebaseAuth.getCurrentUser() != null && firebaseAuth.getCurrentUser().getUid() != null) {
            loggedInUserId = firebaseAuth.getCurrentUser().getUid();
        }
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        switch (menuItem.getItemId()) {
            case R.id.menu_share:
                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setType("text/plain");
                intent.putExtra(Intent.EXTRA_SUBJECT, "DataPro");
                intent.putExtra(Intent.EXTRA_TEXT, Constants.shareMessage);
                startActivity(Intent.createChooser(intent, "Share Via"));
                drawerLayout.closeDrawer(GravityCompat.START);
                break;
            case R.id.menu_survey_count:
                startActivity(new Intent(getApplicationContext(), UserAllSurveys.class));
                drawerLayout.closeDrawer(GravityCompat.START);
                break;
            case R.id.menu_new_instruments:
                startActivity(new Intent(getApplicationContext(), CreateInstrument.class));
                drawerLayout.closeDrawer(GravityCompat.START);
                break;
            case R.id.menu_about_us:
                Toast.makeText(getApplicationContext(), "About us", Toast.LENGTH_SHORT).show();
                drawerLayout.closeDrawer(GravityCompat.START);
                break;
        }
        return true;
    }

    @Override
    protected void onStart() {
        super.onStart();
        Intent intent = getIntent();
        /*if (intent.hasExtra("work") ) {
            String k = getIntent().getStringExtra("work");
            Toast.makeText(this, k, Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "eroor" , Toast.LENGTH_SHORT).show();
        }*/
        Bundle bundle = getIntent().getExtras();
        if (bundle != null ) {
            String k = bundle.getString("work");
            Toast.makeText(this, k, Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "error" , Toast.LENGTH_SHORT).show();
        }

    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Попробуйте вот так

Bundle bundle = getIntent().getExtras();
if (bundle != null ) {
   String k = bundle.getString("work");
   Toast.makeText(this, k, Toast.LENGTH_SHORT).show();
} else {
   Toast.makeText(this, "error" , Toast.LENGTH_SHORT).show();
}
0 голосов
/ 08 ноября 2019

У вас есть другой класс с тем же именем класса, но с другим именем пакета? Потому что кажется, что в вашем приемнике нет никаких дополнительных параметров (AuthorMainScreen). Иногда такие ошибки могут занимать больше времени, чем любая другая логическая ошибка. или вы можете попробовать вызвать его onCreate (), комментируя остальную часть кода, просто отметьте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...