首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoIncrement领域失败

AutoIncrement领域失败
EN

Stack Overflow用户
提问于 2016-06-05 14:38:18
回答 1查看 335关注 0票数 0

我创建一个活动,并希望插入一个新的领域对象,如果我放置getNextKey(),它总是保持错误http null;

这是我的活动

代码语言:javascript
复制
package com.example.rikirikmen.billsplit;

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.rikirikmen.billsplit.Adapter.BillListAdapter;
import com.example.rikirikmen.billsplit.Adapter.MenuAdapter;
import com.example.rikirikmen.billsplit.Model.Bill;
import com.example.rikirikmen.billsplit.Model.DetailMenu;
import com.example.rikirikmen.billsplit.Model.DetailPerson;
import com.example.rikirikmen.billsplit.Model.PersonInMenu;
import com.example.rikirikmen.billsplit.Model.PersonMenuObj;

import org.w3c.dom.Text;

import java.util.ArrayList;

import io.realm.Realm;
import io.realm.RealmChangeListener;
import io.realm.RealmList;
import io.realm.RealmObject;

public class DialogActivity extends AppCompatActivity {
Realm realm;
private RealmList<DetailPerson> person;
private RealmList<PersonInMenu> pim;
private ListView listView;
private MenuAdapter adapter;
private TextView menuName;
private TextView menuPrice;
private TextView menuQty;
private String bill;
private Button btnOke;
private Button btnCancel;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dialog_add_menu);
    realm = Realm.getDefaultInstance();
    bill = getIntent().getStringExtra("bill_ID");
    btnOke = (Button) findViewById(R.id.btnOkMenu);
    btnCancel = (Button) findViewById(R.id.btnCancelMenu);
    menuName = (TextView) findViewById(R.id.txtMenuName);
    menuPrice = (TextView) findViewById(R.id.txtMenuPrice);
    menuQty = (TextView) findViewById(R.id.txtMenuQuantity);
    listView = (ListView) findViewById(R.id.listViewMenu);

    Toast.makeText(this, getNextKey(), Toast.LENGTH_SHORT).show();

    person = realm.where(Bill.class).equalTo("Bill_ID", bill).findFirst().getDetailperson();

        if (person.isEmpty()){


        }
        else{
            adapter = new MenuAdapter(this,R.layout.row_menu, person,bill);
            listView.setAdapter(adapter);
        }

    btnOke.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (menuName.getText().length()==0 || menuPrice.getText().length()==0|| menuQty.getText().length()==0){
                Toast.makeText(DialogActivity.this, "Please fill the menu detail", Toast.LENGTH_SHORT).show();

            }
            else {
                CharSequence priceText = menuPrice.getText();
                int Price = Integer.parseInt(priceText.toString());

                CharSequence qtyText = menuQty.getText();
                int Qty = Integer.parseInt(qtyText.toString());

                realm.beginTransaction();
                DetailMenu menu = realm.createObject(DetailMenu.class);
                menu.setMenuID(getNextKey());
                menu.setMenuName(String.valueOf(menuName.getText()));
                menu.setMenuPrice(Price);
                menu.setQuantity(Qty);

                    for (int i = 0; i < adapter.getPersonMenuObjList().size(); i++) {
                        PersonInMenu pim = realm.createObject(PersonInMenu.class);
                        pim.setPersonID(adapter.getPersonMenuObjList().get(i).getPersonID());
                        pim.setStatus(adapter.getPersonMenuObjList().get(i).isStatus());
                        menu.personInMenus.add(pim);
                    }


                realm.copyToRealmOrUpdate(menu);
                realm.commitTransaction();
                realm.close();


            }
        }
    });



}
int getNextKey()
{
    return realm.where(DetailMenu.class).max("MenuID").intValue() + 1;
}

}

这是我的DetailMenu.class

代码语言:javascript
复制
package com.example.rikirikmen.billsplit.Model;


import io.realm.RealmList;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
import io.realm.annotations.Required;

/**
 * Created by rikirikmen on 4/24/2016.
 */
public class DetailMenu extends RealmObject {

    @PrimaryKey
    private int MenuID;
    private int Quantity;
    private String MenuName;
    private int MenuPrice;
    public RealmList<PersonInMenu> personInMenus;

    public RealmList<PersonInMenu> getPersonInMenus() {
        return personInMenus;
    }

    public void setPersonInMenus(RealmList<PersonInMenu> personInMenus) {
        this.personInMenus = personInMenus;
    }

    public DetailMenu() {
        super();
    }

    public int getMenuPrice() {
        return MenuPrice;
    }

    public void setMenuPrice(int menuPrice) {
        MenuPrice = menuPrice;
    }

    public int getMenuID() {
        return MenuID;
    }

    public void setMenuID(int menuID) {
        MenuID = menuID;
    }

    public String getMenuName() {
        return MenuName;
    }

    public void setMenuName(String menuName) {
        MenuName = menuName;
    }

    public int getQuantity() {
        return Quantity;
    }

    public void setQuantity(int quantity) {
        Quantity = quantity;
    }


}

我不知道为什么我的getNextKey()不工作,因为我在其他活动中使用了相同的方式,而且它可以工作。这里有人和我有同样的问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-05 19:57:12

如果不存在对象,max返回数字或null。因此,很可能不存在DetailMenu对象,并且您得到了一个NullPointerException。

用这个代替:

代码语言:javascript
复制
Number max = realm.where(DetailMenu.class).max("MenuID");
return (max != null) ? max.intValue() + 1 : 0;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37643099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档