我无法传递和检索意图布尔额外

时间:2015-10-18 17:40:51

标签: android android-intent pass-data

我试图让我的代码通过意图传递boolean extra但我失败了。我调试并观察到我的活动“B”将EXTRA_IS_ADDED的值指定为true,正如我想的那样比调用startActivity(intent)时,在我的活动“A”中,我无法正确使用此数据来指定isAdded的值。

这是我打电话给的活动A:

package com.example.recepinanc.whenfreedeneme;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

/**
 * Created by recepinanc on 10/10/15.
 */
public class WorksActivity extends AppCompatActivity {

    private Boolean isAdded;
    private ListView todoListView;
    private ArrayList<Work> works;
    private Context mContext;

    private int year;
    private int month;
    private int day;
    private int hour;
    private int minute;

    private String title;
    private String category;

    //TODO Add school social todo overall buttons.


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

        Log.i("WorksActivity", "works activity'te");

        mContext = getApplicationContext();
        works = new ArrayList<Work>();
    }

    @Override
    protected void onResume() {
        super.onResume();

        isAdded = getIntent().getBooleanExtra(AddWorkActivity.EXTRA_IS_ADDED, false);
        year = getIntent().getIntExtra(AddWorkActivity.EXTRA_YEAR, 0);
        month = getIntent().getIntExtra(AddWorkActivity.EXTRA_MONTH, 0);
        day = getIntent().getIntExtra(AddWorkActivity.EXTRA_DAY,0);
        hour = getIntent().getIntExtra(AddWorkActivity.EXTRA_HOUR,0);
        minute = getIntent().getIntExtra(AddWorkActivity.EXTRA_MINUTE,0);

        title = getIntent().getStringExtra(AddWorkActivity.EXTRA_TITLE);
        category = getIntent().getStringExtra(AddWorkActivity.EXTRA_CATEGORY);


        //TODO isAdded True pass edilemiyor
        Log.i("is_Added",isAdded.toString());
        if (isAdded) {
            //TODO examine the true isAdded case.
            Log.i("isAddedTrue",isAdded.toString());
            Work work = new Work();

            Log.i("isAddedTrue","work creationdan sonra");
            work.setmTitle(title);
            work.setmCategory(category);
            work.setmYear(year);
            work.setmMonth(monthConverter(month));
            work.setmDay(day);
            work.setmHour(hour);
            work.setmMinute(minuteConverter(minute));

            Log.i("isAddedTrue", "work.setlerden sonra");
            //works.add(work);
            updateArray(works, work);

            Log.i("isAddedTrue", "work.array addden sonra");
            Toast.makeText(WorksActivity.this, "NEWBIE ADDED.", Toast.LENGTH_SHORT).show();

            isAdded = false;

            Log.i("isAddedTrue", "work is added false setden sivvaliiiiiim sonra");
        }

        Log.i("isAddedTrue", "listview found");
        todoListView = (ListView) findViewById(R.id.listView);

        Log.i("isAddedTrue", "listview founddan sonra");
        todoListView.setAdapter(new WorkAdapter(getApplicationContext(), works));

        Log.i("isAddedTrue", "listAdapter setten sonra");
    }

    public void updateArray(ArrayList<Work> works, Work work) {

        //Add a new item add its date and update the array
        works.add(work);
        Toast.makeText(WorksActivity.this, "A new work is created! " +
                "\n" + work.getmTitle() +
                "\n" + work.getmCategory() +
                "\n" + work.getmDay() +
                "\n" + work.getmMonth() +
                "\n" + work.getmYear() +
                "\n" + work.getmHour() +
                "\n" + work.getmMinute(), Toast.LENGTH_LONG).show();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.add_action:
                Intent intent = new Intent(WorksActivity.this, AddWorkActivity.class);
                Log.i("WorksActivity", "Created intent");
                startActivity(intent);
                Log.i("WorksActivity", "Started Activity");
                break;
            default:
                Log.e("WorksActivity", "INVALID BUTTON");
                break;
        }
        return true;
    }

    public String monthConverter(int month) {
        switch (month + 1) {
            case 1:
                return "January";
            case 2:
                return "February";
            case 3:
                return "March";
            case 4:
                return "April";
            case 5:
                return "May";
            case 6:
                return "June";
            case 7:
                return "July";
            case 8:
                return "August";
            case 9:
                return "September";
            case 10:
                return "October";
            case 11:
                return "November";
            case 12:
                return "December";
            default:
                return "UNKNOWN";
        }
    }

    public String minuteConverter(int minute) {
        if (minute / 10 <= 0)
            return "0" + minute;
        else
            return minute + "";
    }

}

这是我的第二个-B-活动:

package com.example.recepinanc.whenfreedeneme;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.TimePicker;

import java.util.Calendar;

/**
 * Created by recepinanc on 11/10/15.
 */
public class AddWorkActivity extends AppCompatActivity {

    public static final String EXTRA_TITLE = "title";
    public static final String EXTRA_CATEGORY = "category";
    public static final String EXTRA_YEAR = "year";
    public static final String EXTRA_MONTH = "month";
    public static final String EXTRA_DAY = "day";
    public static final String EXTRA_HOUR = "hour";
    public static final String EXTRA_MINUTE = "minute";
    public static final String EXTRA_IS_ADDED = "isAdded";

    static final int DATE_DIALOG_ID = 999;
    static final int TIME_DIALOG_ID = 111;

    private EditText title;
    private RadioGroup categoryRadioGroup;
    private TextView datePicker;
    private TextView timePicker;

    private int year;
    private int month;
    private int day;

    private int hour;
    private int minute;
    private boolean is24HourView = true;


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

        Log.i("AddWorkActivity","addwork'te");

        title = (EditText) findViewById(R.id.todoTitle_editText);
        categoryRadioGroup = (RadioGroup) findViewById(R.id.category_radioGroup);
        datePicker = (TextView) findViewById(R.id.dateSpinner_textView);
        timePicker = (TextView) findViewById(R.id.timeSpinner_textView);

        Calendar calendar = Calendar.getInstance();
        year = calendar.get(Calendar.YEAR);
        month = calendar.get(Calendar.MONTH);
        day = calendar.get(Calendar.DAY_OF_MONTH);

        hour = calendar.get(Calendar.HOUR_OF_DAY);
        minute = calendar.get(Calendar.MINUTE);


        setDateOnView();

        datePicker.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //todo call the create dialog method here.
                showDialog(DATE_DIALOG_ID);
            }
        });

        timePicker.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //todo call create dialog for time picker.
                showDialog(TIME_DIALOG_ID);
            }
        });
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case DATE_DIALOG_ID:
                //set date as the current date
                return new DatePickerDialog(this, dateSetListener, year, month, day);
            case TIME_DIALOG_ID:
                //set time as the current time
                return new TimePickerDialog(this, timeSetListener, hour, minute, is24HourView);
        }
        return null;
    }

    private DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {

            //assign selected values
            year = selectedYear;
            month = selectedMonth;
            day = selectedDay;

            //update the textView to selected date
            setDateAsText(datePicker);
        }

    };

    private TimePickerDialog.OnTimeSetListener timeSetListener = new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int selectedHour, int selectedMinute) {

            //assign the selected time
            hour = selectedHour;
            minute = selectedMinute;

            setTimeAsText(timePicker);
        }
    };

    private void setDateOnView() {

        setDateAsText(datePicker);
        setTimeAsText(timePicker);

    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // handle item selection
        switch (item.getItemId()) {
            case R.id.cancel_action:
                //TODO Make this return to its activity
                finish();
                break;
            case R.id.save_action:
                //TODO Get info and pass it to the activity's updateArrayMethodString category = "";
                String category = "";
                int checkedRadioID = categoryRadioGroup.getCheckedRadioButtonId();
                switch (checkedRadioID) {
                    case R.id.todo_radioButton:
                        category = "To-Do";
                        break;
                    case R.id.school_radioButton:
                        category = "School";
                        break;
                    case R.id.social_radioButton:
                        category = "Social";
                        break;
                    default:
                        Log.e("WorksActivity", "Unexpected RadioButton ID");
                        break;
                }

                //pass data via intent
                Intent intent = new Intent(getBaseContext(), WorksActivity.class);
                intent.putExtra(EXTRA_TITLE, title.getText().toString());
                intent.putExtra(EXTRA_CATEGORY, category);
                intent.putExtra(EXTRA_HOUR, hour);
                intent.putExtra(EXTRA_MINUTE, minute);
                intent.putExtra(EXTRA_YEAR, year);
                intent.putExtra(EXTRA_MONTH, month);
                intent.putExtra(EXTRA_DAY, day);
                intent.putExtra(EXTRA_IS_ADDED, true);
                Log.i("Addworkacitivty", "add work activity intent");
                startActivity(intent);
                break;
            default:
                break;
        }
        return true;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_add_activity, menu);
        return true;
    }

    public String monthConverter(int month) {
        switch (month + 1) {
            case 1:
                return "JANUARY";
            case 2:
                return "FEBRUARY";
            case 3:
                return "MARCH";
            case 4:
                return "APRIL";
            case 5:
                return "MAYY";
            case 6:
                return "JUNE";
            case 7:
                return "JULY";
            case 8:
                return "AUGUST";
            case 9:
                return "SEPTEMBER";
            case 10:
                return "OCTOBER";
            case 11:
                return "NOVEMBER";
            case 12:
                return "DECEMBER";
            default:
                return "UNKNOWN";
        }
    }

    public String minuteConverter(int minute) {
        if (minute / 10 <= 0)
            return "0" + minute;
        else
            return minute + "";
    }

    public void setDateAsText(TextView datePicker) {
        datePicker.setText(new StringBuilder().append(day).append(" ")
                .append(monthConverter(month)).append(" ").append(year));
    }

    public void setTimeAsText(TextView timePicker) {
        timePicker.setText(new StringBuilder().append(hour).append(":").append(minuteConverter(minute)));
    }
}

这是我的适配器:

package com.example.recepinanc.whenfreedeneme;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;

/**
 * Created by recepinanc on 11/10/15.
 */
public class WorkAdapter extends BaseAdapter {

    private Context mContext;
    ArrayList<Work> works;

    public WorkAdapter(Context applicationContext, ArrayList<Work> works) {
        this.mContext = applicationContext;
        this.works = works;
    }

    @Override
    public int getCount() {
        return works.size();
    }

    @Override
    public Object getItem(int position) {
        return works.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //Upgrade this to view holder.
        View v;

        if (convertView == null) {

            LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = layoutInflater.inflate(R.layout.work_item_layout, parent, false);

            TextView title = (TextView) v.findViewById(R.id.title_textView);
            TextView category = (TextView) v.findViewById(R.id.category_textView);
            TextView date = (TextView) v.findViewById(R.id.date_textView);
            TextView time = (TextView) v.findViewById(R.id.time_textView);

            Work work = works.get(position);

            titleResizer(title, work.getmTitle());
            category.setText(work.getmCategory());
            date.setText(new StringBuilder().append(work.getmDay()).append(" ")
                    .append(work.getmMonth()).append(" ").append(work.getmYear()));
            time.setText(new StringBuilder().append(work.getmHour())
                    .append(":").append(work.getmMinute()));
        } else {
            v = convertView;
        }
        return v;
    }

    public void titleResizer(TextView title, String titleText){
        if (titleText.length() > 25)
            title.setTextSize(12);
        else if (titleText.length() > 20)
            title.setTextSize(15);
        else if (titleText.length() > 15 )
            title.setTextSize(18);
        else if (titleText.length() > 10 )
            title.setTextSize(20);
        else
            title.setTextSize(25);

        title.setText(titleText);
    }
}

2 个答案:

答案 0 :(得分:1)

请注意,getBoolean返回boolean(Primitive类型)而不是Boolean。

来自文档:

  

public boolean getBooleanExtra(String name,boolean defaultValue)

     

在API级别1中添加从意图中检索扩展数据。

     

参数name所需项目的名称。 defaultValue该值   如果没有存储所需类型的值,则返回   给定的名称。返回先前添加的项的值   putExtra()或默认值(如果未找到)。也可以看看   putExtra(String,boolean)

更改

displayEventTime: false

private Boolean isAdded;

答案 1 :(得分:1)

我已将原始评论移至答案,因此您可以将问题标记为已解决。 ;)

var x = 0; private Boolean isAdded;(对象)而不是Boolean(原始类型),所以这里可能会发生一些自动装箱和拆箱。我无法发现任何其他内容,但可能值得尝试将其更改为boolean