【发布时间】:2017-03-08 08:00:32
【问题描述】:
我在 String 中有两个日期,我像这样比较它们:
SimpleDateFormat formatter = new SimpleDateFormat("MMMM' 'dd', 'yyyy");
Date date1 = formatter.parse(final_date.toString());
Log.e("Taggal Selected:",date1.toString());
String str2 = "March 10, 2017";
Date date2 = formatter.parse(str2);
if (date1.compareTo(date2)<0)
{
btn_lunch.setBackgroundResource(R.drawable.lunch_inactive);
btn_dinner.setBackgroundResource(R.drawable.dinner_inactive);
} else if(date1.compareTo(date2)==0) {
date.setText("Tanggal 2 sama 1");
} else {
btn_lunch.setBackgroundResource(R.drawable.lunch_inactive);
btn_dinner.setBackgroundResource(R.drawable.dinner_inactive);
date.setText("Tanggal 1 lebih besar dari tanggal 2");
}
但在尝试使用 setBackgroundResource 更改按钮时它给了我错误,错误说...
java.lang.NullPointerException: 尝试调用虚方法 'void android.widget.Button.setBackgroundResource(int)' 在一个空对象上 参考
代码在尝试更改按钮或设置启用按钮时出错.. 尝试使用 textview 时代码通常可以使用... 我的错在哪里?
这是我的完整课程..
public class ProductBuyActivity extends AppCompatActivity {
private int year;
private int month;
private int day;
private int user_id;
public String token = "",difday,diff,val;
static TextView date;
ImageView imgbg;
ProgressDialog pDialog;
public Button btn_lunch,btn_dinner;
Context context;
public final GlobalVar globalvar = (GlobalVar)GlobalVar.getAppContex();
public String final_date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.product_buy_layout);
SharedPreferences shared = getSharedPreferences(getResources().getString(R.string.shared), MODE_PRIVATE);
final String userdata = shared.getString("user_data", "");
Bundle extras = getIntent().getExtras();
try {
JSONObject userobject = new JSONObject(userdata);
user_id = userobject.getInt("id");
} catch (JSONException e) {
e.printStackTrace();
}
AssetManager am = this.getApplicationContext().getAssets();
TextView login_title = (TextView)findViewById(R.id.title);
TextView product_name = (TextView)findViewById(R.id.product_name);
product_name.setText(globalvar.getProductName());
TextView product_portion = (TextView)findViewById(R.id.product_portion);
product_portion.setText(String.valueOf(globalvar.getQty())+" Portion");
imgbg = (ImageView) findViewById(R.id.imagebg);
String detailimg = extras.getString("ImageURL");
int total_price = 0;
total_price = Integer.valueOf(globalvar.getProductPrice()) * globalvar.getQty();
if(globalvar.getFrom().equals("main")){
total_price = Integer.valueOf(globalvar.getProductPrice()) * globalvar.getQty();
}else{
total_price = Integer.valueOf(globalvar.getProductPrice()) * globalvar.getQty();
}
TextView product_price = (TextView)findViewById(R.id.product_price);
product_price.setTypeface(font);
product_price.setText(HelperClass.price(String.valueOf(total_price)));
TextView txt = (TextView)findViewById(R.id.txt1);
txt.setTypeface(font4);
btn_lunch = (Button) findViewById(R.id.lunch);
btn_dinner = (Button) findViewById(R.id.dinner);
Button btn1 = (Button)findViewById(R.id.btn1);
btn1.setTypeface(font);
Button btn2 = (Button)findViewById(R.id.btn2);
btn2.setTypeface(font);
date = (TextView)findViewById(R.id.date);
date.setTypeface(font);
request_validation();
// Get current date by calender
// Button listener to show date picker dialog
final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
// Show current date
StringBuilder current_date = new StringBuilder()
// Month is 0 based, just add 1
.append(month + 1).append("-").append(day).append("-")
.append(year).append(" ");
SimpleDateFormat dateFormat = new SimpleDateFormat("M-dd-yyyy", Locale.getDefault());
Date mydate = null;
try{
mydate = dateFormat.parse(current_date.toString());
}catch(ParseException e){
e.printStackTrace();
}
SimpleDateFormat custome_date = new SimpleDateFormat("MMMM' 'dd','yyyy", Locale.getDefault());
String final_date = custome_date.format(mydate);
globalvar.setDate(final_date);
date.setText(final_date);
// Button listener to show date picker dialog
date.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
show_date_picker();
}
});
ImageView back = (ImageView)findViewById(R.id.back_button);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
go_back();
}
});
globalvar.setOrderTime(0);
}
public void setdate(){
GlobalVar globalvar = (GlobalVar)GlobalVar.getAppContex();
difday = globalvar.get_diffday();
int adddate=0;
String logadd = String.valueOf(adddate);
Log.e("Logadd",logadd);
if(difday.equals("2")){
adddate = 2;
logadd = String.valueOf(adddate);
Log.e("Logadd2",logadd);
}else {
adddate = 1;
logadd = String.valueOf(adddate);
Log.e("Logadd1",logadd);
}
final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
// Show current date
StringBuilder current_date = new StringBuilder()
// Month is 0 based, just add 1
.append(month + 1).append("-").append(day+adddate).append("-")
.append(year).append(" ");
SimpleDateFormat dateFormat = new SimpleDateFormat("M-dd-yyyy", Locale.getDefault());
Date mydate = null;
try{
mydate = dateFormat.parse(current_date.toString());
}catch(ParseException e){
e.printStackTrace();
}
SimpleDateFormat custome_date = new SimpleDateFormat("MMMM' 'dd','yyyy", Locale.getDefault());
String final_date = custome_date.format(mydate);
globalvar.setDate(final_date);
date.setText(final_date);
}
public void go_checkout(View v){
DatabaseHandler db = new DatabaseHandler(this);
ShoppingCartList cartlist = new ShoppingCartList();
cartlist.setProductId(globalvar.getProductId());
cartlist.setProductName(globalvar.getProductName());
cartlist.setProductPrice(globalvar.getProductPrice());
cartlist.setImage(globalvar.getImage());
cartlist.setQty(globalvar.getQty());
cartlist.setDate(globalvar.getDate());
cartlist.setOrderTime(globalvar.getOrderTime());
cartlist.setProductSellingPrice(globalvar.getProductSellingPrice());
cartlist.setuserID(user_id);
//db.addCart(cartlist);
if(globalvar.getFrom().equals("main")){
if(db.Cart_Exists(globalvar.getProductId(), globalvar.getOrderTime(), globalvar.getDate(), user_id)){
ShoppingCartList cart_detail = db.getCart(globalvar.getProductId(), globalvar.getOrderTime(), globalvar.getDate(), user_id);
}
// if(db.Cart_Exists(globalvar.getProductId(), globalvar.getOrderTime(), globalvar.getDate())){
//
// ShoppingCartList cart_detail = db.getCart(globalvar.getProductId(), globalvar.getOrderTime(), globalvar.getDate());
//
// cart_detail.setQty(cart_detail.getQty() + globalvar.getQty());
//
// db.updateChart(cart_detail);
}else{
db.addCart(cartlist);
}
if(globalvar.getFrom().equals("main")){
if(db.Cart_Exists(globalvar.getProductId(), globalvar.getOrderTime(), globalvar.getDate(),user_id)){
ShoppingCartList cart_detail = db.getCart(globalvar.getProductId(), globalvar.getOrderTime(), globalvar.getDate(),user_id);
cart_detail.setQty(cart_detail.getQty() + globalvar.getQty());
db.updateChart(cart_detail);
}else{
db.addCart(cartlist);
}
}
else{
if(db.Cart_ExistsPaket(globalvar.getProductId(), globalvar.getOrderTime(), globalvar.getDate(),user_id)){
ShoppingCartList cart_detail = db.getCartPaket(globalvar.getProductId(), globalvar.getOrderTime(), globalvar.getDate(),user_id);
cart_detail.setQty(cart_detail.getQty() + globalvar.getQty());
db.updateChartPaket(cart_detail);
}else{
db.addCartPaket(cartlist);
}
}
db.close();
Toast.makeText(ProductBuyActivity.this, "Added To Shopping Cart", Toast.LENGTH_LONG).show();
if(globalvar.getFrom().equals("main")){
this.finish();
Intent intent = new Intent(this, ShoppingCartActivity.class);
startActivity(intent);
}else{
// this.finish();
// Intent intent = new Intent(this, OrderPacketActivity.class);
// startActivity(intent);
}
}
public void go_addchart(View v){
DatabaseHandler db = new DatabaseHandler(this);
ShoppingCartList cartlist = new ShoppingCartList();
cartlist.setProductId(globalvar.getProductId());
cartlist.setProductName(globalvar.getProductName());
cartlist.setProductPrice(globalvar.getProductPrice());
cartlist.setImage(globalvar.getImage());
cartlist.setQty(globalvar.getQty());
cartlist.setDate(globalvar.getDate());
cartlist.setOrderTime(globalvar.getOrderTime());
cartlist.setProductSellingPrice(globalvar.getProductSellingPrice());
cartlist.setuserID(user_id);
if(globalvar.getFrom().equals("main")){
if(db.Cart_Exists(globalvar.getProductId(), globalvar.getOrderTime(), globalvar.getDate(),user_id)){
ShoppingCartList cart_detail = db.getCart(globalvar.getProductId(), globalvar.getOrderTime(), globalvar.getDate(),user_id);
cart_detail.setQty(cart_detail.getQty() + globalvar.getQty());
db.updateChart(cart_detail);
}else{
db.addCart(cartlist);
}
}else{
if(db.Cart_ExistsPaket(globalvar.getProductId(), globalvar.getOrderTime(), globalvar.getDate(),user_id)){
ShoppingCartList cart_detail = db.getCartPaket(globalvar.getProductId(), globalvar.getOrderTime(), globalvar.getDate(),user_id);
cart_detail.setQty(cart_detail.getQty() + globalvar.getQty());
db.updateChartPaket(cart_detail);
}else{
db.addCartPaket(cartlist);
}
}
db.close();
Toast.makeText(ProductBuyActivity.this, "Added To Shopping Cart", Toast.LENGTH_LONG).show();
if(globalvar.getFrom().equals("main")){
this.finish();
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
}
public void selectlunch(View v){
btn_lunch.setBackgroundResource(R.drawable.lunch_active);
btn_dinner.setBackgroundResource(R.drawable.dinner_inactive);
globalvar.setOrderTime(0);
}
public void selectdinner(View v){
btn_lunch.setBackgroundResource(R.drawable.lunch_inactive);
btn_dinner.setBackgroundResource(R.drawable.dinner_active);
globalvar.setOrderTime(1);
}
private void show_date_picker(){
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener,DatePicker.OnDateChangedListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
GlobalVar globalvar = (GlobalVar)GlobalVar.getAppContex();
String difdays = globalvar.get_diffday();
int adddate=0;
String logadd = String.valueOf(adddate);
Log.e("Logadd",logadd);
if(difdays.equals("2")){
adddate = 2;
logadd = String.valueOf(adddate);
Log.e("Logadd2",logadd);
}else {
adddate = 1;
logadd = String.valueOf(adddate);
Log.e("Logadd1",logadd);
}
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH)+adddate;
DatePickerDialog dpd = new DatePickerDialog(getActivity(), android.R.style.Theme_Holo_Light_Dialog, this, year, month, day+adddate);
//dpd.setInverseBackgroundForced(false);
dpd.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dpd.getDatePicker().setMinDate(System.currentTimeMillis() - 1000 );
dpd.setTitle("Select Day"); // Uncomment this line to activate it
// Create a new instance of DatePickerDialog and return it
return dpd;
}
@Override
public void onDateChanged(DatePicker datePicker, int year, int month, int dayOfMonth) {
Log.d("Date", "Year=" + year + " Month=" + (month + 1) + " day=" + dayOfMonth);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
GlobalVar globalvar = (GlobalVar)GlobalVar.getAppContex();
StringBuilder current_date = new StringBuilder()
// Month is 0 based, just add 1
.append(month + 1).append("-").append(day).append("-")
.append(year).append(" ");
SimpleDateFormat dateFormat = new SimpleDateFormat("M-dd-yyyy", Locale.getDefault());
Date mydate = null;
try{
mydate = dateFormat.parse(current_date.toString());
}catch(ParseException e){
e.printStackTrace();
}
SimpleDateFormat custome_date = new SimpleDateFormat("MMMM' 'dd', 'yyyy", Locale.getDefault());
String final_date = custome_date.format(mydate);
globalvar.setDate(final_date);
date.setText(final_date);
ProductBuyActivity product = new ProductBuyActivity();
product.compareDate(final_date);
// product.differenDate(final_date,"0");
}
}
public void enabled_button(){
btn_lunch.setBackgroundResource(R.drawable.lunch_active);
btn_lunch.setEnabled(true);
btn_dinner.setBackgroundResource(R.drawable.dinner_active);
btn_dinner.setEnabled(true);
// Toast.makeText(getBaseContext(), "date2 is Greater than my date1", Toast.LENGTH_LONG).show();
}
public void disabled_button(){
btn_lunch.setBackgroundResource(R.drawable.lunch_inactive);
btn_lunch.setEnabled(false);
btn_dinner.setBackgroundResource(R.drawable.dinner_inactive);
btn_dinner.setEnabled(false);
// Toast.makeText(getBaseContext(), "date2 is Greater than my date1", Toast.LENGTH_LONG).show();
}
public void compareDate(String final_date) {
try{
Context context;
SimpleDateFormat formatter = new SimpleDateFormat("MMMM' 'dd', 'yyyy");
Date date1 = formatter.parse(final_date.toString());
Log.e("Taggal Selected:",date1.toString());
String str2 = "March 10, 2017";
Date date2 = formatter.parse(str2);
if (date1.compareTo(date2)<0)
{
System.out.print("Date2 is Greater than mydate1");
date.setText("Tanggal 2 lebih besar dari tanggal 1");
//// btn_lunch.setBackgroundResource(R.drawable.lunch_inactive);
// btn_lunch.setEnabled(false);
//// btn_dinner.setBackgroundResource(R.drawable.dinner_inactive);
// btn_dinner.setEnabled(false);
enabled_button();
// Toast.makeText(getBaseContext(), "date2 is Greater than my date1", Toast.LENGTH_LONG).show();
}
else if(date1.compareTo(date2)==0){
// Toast.makeText(getBaseContext(), "Same Date", Toast.LENGTH_SHORT).show();
System.out.print("Same Date");
date.setText("Tanggal 2 sama 1");
}
else{
// disabled_button();
System.out.print("Date1 is Greater than mydate2");
date.setText("Tanggal 1 lebih besar dari tanggal 2");
}
}catch (ParseException e1){
e1.printStackTrace();
}
}
public void request_token() {
StringRequest stringRequest = new StringRequest(Request.Method.POST, getResources().getString(R.string.API) + "oauth/token",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("respon token", response);
//Toast.makeText(getBaseContext(), response, Toast.LENGTH_LONG).show();Toast.makeText(getBaseContext(), response, Toast.LENGTH_LONG).show();
//String token = "";
try {
JSONObject return_val = new JSONObject(response);
token = return_val.getString("access_token");
} catch (JSONException e) {
e.printStackTrace();
//Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
}
SharedPreferences.Editor editor = getSharedPreferences(getResources().getString(R.string.shared), MODE_PRIVATE).edit();
editor.putString("token", token);
editor.commit();
request_validation();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(ProductBuyActivity.this, error.toString(), Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("grant_type", getResources().getString(R.string.grant_type));
map.put("username", getResources().getString(R.string.username));
map.put("password", getResources().getString(R.string.password));
map.put("client_id", getResources().getString(R.string.client_id));
map.put("client_secret", getResources().getString(R.string.client_secret));
return map;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
stringRequest.setRetryPolicy(new DefaultRetryPolicy(15000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
requestQueue.add(stringRequest);
}
private void go_back(){
this.finish();
}
private void showPDialog() {
pDialog = new ProgressDialog(ProductBuyActivity.this, R.style.MyTheme);
//pDialog.setTitle("Loading... Please Wait");
pDialog.setCancelable(false);
pDialog.setProgressStyle(android.R.style.Widget_Material_ProgressBar_Large);
pDialog.show();
}
private void hidePDialog() {
if (pDialog != null) {
pDialog.dismiss();
pDialog = null;
}
}
@Override
public void onBackPressed() {
go_back();
}
}
【问题讨论】:
-
你初始化
btn_lunch和btn_dinner了吗? -
@cipley 是的,我已经在 onCreate 中初始化了按钮...
-
NPE 在您尝试使用未初始化的对象时发生。你能发布你的
onCreate方法吗? -
btn_lunch/btn_dinner 一个或两个都为空..这就是为什么它抛出 NPE.. 意味着你没有正确初始化按钮。请发布 OnCreate()。
-
@cipley 是的,我已经编辑了我的问题并将 onCreate 放在那里..