主頁 > 軟體工程 > 我正在使用片段創建AndroidNote應用程式,但我無法處理NoteFragment.java中發生的錯誤

我正在使用片段創建AndroidNote應用程式,但我無法處理NoteFragment.java中發生的錯誤

2022-11-13 20:59:04 軟體工程

NoteFragment.java

public class NoteFragment extends Fragment {

    private ListView noteListView;
    private Note note;
    List <Note> notes = new ArrayList<Note>();
    private Button add;
    private NoteAdapter noteAdapter;
    private String title = "title";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_note, container, false);
        noteListView = (ListView) view.findViewById(R.id.noteListView);

        initWidgets();
        loadFromDBtoMemory();
        setNoteAdapter();

        return view;
    }

    private void initWidgets() {
        noteListView = getActivity().findViewById(R.id.noteListView);
        add = getActivity().findViewById(R.id.add_fragment);
    }

    private void loadFromDBtoMemory() {
        SQLiteManager sqLiteManager = new SQLiteManager(getActivity());
        sqLiteManager.populateNoteListArray("");
    }

    private void setNoteAdapter() {

        NoteAdapter noteAdapter = new NoteAdapter(getContext().getApplicationContext(), Note.nonDeletedNotes());
        noteListView.setAdapter(noteAdapter);
    }

    @Override
    public void onResume() {
        super.onResume();
        setNoteAdapter();
    }

NoteAdapter.java

public class NoteAdapter extends ArrayAdapter<Note> {

    public NoteAdapter(Context context, List<Note> notes){
        super(context, 0,notes);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        Note note = getItem(position);
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.note_cell, parent, false);
        }

        TextView title = convertView.findViewById(R.id.cellTitle);
        TextView description = convertView.findViewById(R.id.cellDesc);
        TextView realTime = convertView.findViewById(R.id.realTime);
        ImageView smallImg = convertView.findViewById(R.id.smallImg);
        TextView impTextView = convertView.findViewById(R.id.ImpTextView);

        title.setText(note.getTitle());
        description.setText(note.getDescription());

        String formatedTime = DateFormat.getDateTimeInstance().format(note.getRealTime());
        realTime.setText(formatedTime);

        Uri uri = Uri.parse(note.getUri());
        smallImg.setImageURI(null);
        smallImg.setImageURI(uri);

        if (Objects.equals(note.getSelection(), "very important")) {
            impTextView.setText(note.getSelection());
            impTextView.setBackgroundColor(Color.rgb(255, 0, 0));
        }
        if (Objects.equals(note.getSelection(), "important")) {
            impTextView.setText(note.getSelection());
            impTextView.setBackgroundColor(Color.rgb(255, 255, 153));
        }
        if (Objects.equals(note.getSelection(), "not very important")) {
            impTextView.setText(note.getSelection());
            impTextView.setBackgroundColor(Color.rgb(240, 248, 255));
        }

        return convertView;
    }

}

AddFragment.java

public class AddFragment extends Fragment {

    private EditText titleEditText, descEditText;
    private Note selectedNote;
    private ImageView newImg;
    private FloatingActionButton addImg;
    private ConstraintLayout imgContainer;
    private final int PICK_IMAGE_CODE = 123;
    private String tempUri = "empty";
    private String[] importancy = {"very important", "important", "not very important"};
    private Spinner spinner;
    private String selectedItem;
    private View view;
    private Button saveNote;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_add, container, false);
        SQLiteManager sqLiteManager = new SQLiteManager(getActivity());
        spinner = view.findViewById(R.id.importancy);

        titleEditText = view.findViewById(R.id.titleEditText);
        descEditText = view.findViewById(R.id.descriptionEditText);
        addImg = view.findViewById(R.id.addImg);
        imgContainer = view.findViewById(R.id.imgContainer);
        newImg = view.findViewById(R.id.newImg);
        spinner = view.findViewById(R.id.importancy);
        saveNote = view.findViewById(R.id.saveNote);

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

        ArrayAdapter<String> importancyAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, importancy);
        importancyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(importancyAdapter);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                selectedItem = adapterView.getSelectedItem().toString();
                for (int u = 0; u < importancy.length; u  ) {
                    if (importancy[i] == "very important")
                        view.setBackgroundColor(Color.rgb(255, 0, 0));
                    if (importancy[i] == "important")
                        view.setBackgroundColor(Color.rgb(255, 255, 153));
                    if (importancy[i] == "not very important")
                        view.setBackgroundColor(Color.rgb(240, 248, 255));
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });
        return view;
}

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


    public void saveNote(View view) {

        SQLiteManager sqLiteManager = new SQLiteManager(getActivity());

        String title = String.valueOf(titleEditText.getText());
        String desc = String.valueOf(descEditText.getText());
        long realTime = System.currentTimeMillis();
        String uri = String.valueOf(tempUri);
        String selection = String.valueOf(selectedItem);

        if(selectedNote == null){
            int id = Note.noteArrayList.size();
            Note newNote = new Note(id, title, desc, realTime, uri, selection);
            Note.noteArrayList.add(newNote);

            System.out.println(Note.noteArrayList);

            sqLiteManager.addNoteToDatabase(newNote);
            Toast.makeText(getActivity().getApplicationContext(), "Note saved", Toast.LENGTH_SHORT).show();
        }
        else {
            selectedNote.setTitle(title);
            selectedNote.setDescription(desc);
            selectedNote.setRealTime(realTime);
            selectedNote.setUri(uri);
            selectedNote.setSelection(selection);
            sqLiteManager.updateNoteInDB(selectedNote);
        }

    }

}

Note.java

public class Note {

    public static ArrayList<Note> noteArrayList = new ArrayList<>();
    public static String NOTE_EDIT_EXTRA = "noteEdit";

    private int id;
    private String title;
    private String description;
    private long realTime;
    private String uri = "empty";
    private String selection;
    private Date deleted;

    public Note(int id, String title, String description, long realTime, String uri, String selection, Date deleted) {
        this.id = id;
        this.title = title;
        this.description = description;
        this.realTime = realTime;
        this.uri = uri;
        this.selection = selection;
        this.deleted = deleted;
    }

    public Note(int id, String title, String description, long realTime, String uri, String selection) {
        this.id = id;
        this.title = title;
        this.description = description;
        this.realTime = realTime;
        this.uri = uri;
        this.selection = selection;
        deleted = null;
    }

    public static Note getNoteForID(int passedNoteID) {
        for(Note note : noteArrayList){
            if(note.getId() == passedNoteID){
                return note;
            }
        }
        return null;
    }

    public static ArrayList<Note> nonDeletedNotes(){

        ArrayList<Note> nonDeleted = new ArrayList<>();
        for(Note note : noteArrayList){
            if(note.getDeleted() == null){
                nonDeleted.add(note);
            }
        }
        return nonDeleted;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public long getRealTime() {return  realTime; }

    public void setRealTime(long realTime) {this.realTime = realTime;}

    public String getUri (){return uri;}

    public void setUri(String uri) {this.uri = uri;}

    public String getSelection(){return selection;}

    public void setSelection(String selection) {this.selection = selection;}

    public Date getDeleted() {
        return deleted;
    }

    public void setDeleted(Date deleted) {
        this.deleted = deleted;
    }

}

** SQLiteManager.java **

public class SQLiteManager extends SQLiteOpenHelper {

    private static SQLiteManager sqLiteManager;

    private static final String DATABASE_NAME = "NoteDB";
    private static final int DATABASE_VERSION = 3;
    private static final String TABLE_NAME = "Note";
    private static final String COUNTER = "Counter";

    private static final String ID_FIELD = "id";
    private static final String TITLE_FIELD = "title";
    private static final String DESC_FIELD = "desc";
    private static final String REAL_TIME = "realtime";
    private static final String IMAGE_URI = "uri";
    private static final String SELECTED_ITEM = "selection";
    private static final String DELETED_FIELD = "deleted";

    @SuppressLint("SimpleDateFormat")
    private static final DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");

    public SQLiteManager(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    public static SQLiteManager instanceOfDatabase(Context context) {
        if (sqLiteManager == null) {
            sqLiteManager = new SQLiteManager(context);
        }

        return sqLiteManager;
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        StringBuilder sql;
        sql = new StringBuilder()
                .append(" CREATE TABLE ")
                .append(TABLE_NAME)
                .append("(")
                .append(COUNTER)
                .append(" INTEGER PRIMARY KEY AUTOINCREMENT, ")
                .append(ID_FIELD)
                .append(" INT, ")
                .append(TITLE_FIELD)
                .append(" TEXT, ")
                .append(DESC_FIELD)
                .append(" TEXT, ")
                .append(REAL_TIME)
                .append(" TEXT, ")
                .append(IMAGE_URI)
                .append(" TEXT, ")
                .append(SELECTED_ITEM)
                .append(" TEXT, ")
                .append(DELETED_FIELD)
                .append(" TEXT)");

        sqLiteDatabase.execSQL(sql.toString());
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        //if(newVersion ==2)
          sqLiteDatabase.execSQL("DROP TABLE IF EXISTS "   TABLE_NAME );
          onCreate(sqLiteDatabase);
        //sqLiteDatabase.execSQL("ALTER TABLE "   "Note"   " ADD COLUMN "  REAL_TIME   " TEXT");
    }

    public void addNoteToDatabase(Note note) {
        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();

        ContentValues contentValues = new ContentValues();
        contentValues.put(ID_FIELD, note.getId());
        contentValues.put(TITLE_FIELD, note.getTitle());
        contentValues.put(DESC_FIELD, note.getDescription());
        contentValues.put(REAL_TIME, String.valueOf(note.getRealTime()));
        contentValues.put(IMAGE_URI, note.getUri());
        contentValues.put(SELECTED_ITEM, note.getSelection());
        contentValues.put(DELETED_FIELD, getStringFromDate(note.getDeleted()));

        sqLiteDatabase.insert(TABLE_NAME, null, contentValues);

    }


    public void populateNoteListArray(String title_field) {
        SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
            String Selection = "title"   " like ?";
            Cursor result = sqLiteDatabase.query(TABLE_NAME, null, Selection, new String[]{"%"   title_field   "%"}, null, null, null);

                while (result.moveToNext()) {
                    int id = result.getInt(1);
                    String title = result.getString(2);
                    String desc = result.getString(3);
                    String time = result.getString(4);
                    long realtime = Long.parseLong(time);
                    String imgUri = result.getString(5);
                    String selection = result.getString(6);
                    String stringDeleted = result.getString(7);
                    Date deleted = getDatefromString(stringDeleted);
                    Note note = new Note(id, title, desc, realtime, imgUri, selection, deleted);
                    Note.noteArrayList.add(note);
                }

    }

    public void updateNoteInDB(Note note){
        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(ID_FIELD, note.getId());
        contentValues.put(TITLE_FIELD, note.getTitle());
        contentValues.put(DESC_FIELD, note.getDescription());
        contentValues.put(SELECTED_ITEM, note.getSelection());
        contentValues.put(DELETED_FIELD, getStringFromDate(note.getDeleted()));

        sqLiteDatabase.update(TABLE_NAME, contentValues, ID_FIELD   " =?", new String[]{String.valueOf(note.getId())});
    }

    private String getStringFromDate(Date date) {
        if(date == null){
            return null;
        }
        return dateFormat.format(date);
    }

    private Date getDatefromString(String string){
        try
        {
            return dateFormat.parse(string);
        }
        catch (ParseException | NullPointerException e)
        {
            return null;
        }
    }

問題:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: andrii.sosnytskyi.nure.mynote_v2, PID: 16771
    java.lang.RuntimeException: Unable to start activity ComponentInfo{andrii.sosnytskyi.nure.mynote_v2/andrii.sosnytskyi.nure.mynote_v2.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
        at andrii.sosnytskyi.nure.mynote_v2.NoteFragment.setNoteAdapter(NoteFragment.java:55)
        at andrii.sosnytskyi.nure.mynote_v2.NoteFragment.onCreateView(NoteFragment.java:37)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
        at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3138)
        at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:3072)
        at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:251)
        at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:502)
        at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:248)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1334)
        at android.app.Activity.performStart(Activity.java:7029)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2741)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

請解釋我如何解決它。

uj5u.com熱心網友回復:

根據堆疊跟蹤,在此方法noteListView中為空:

private void setNoteAdapter() {

    NoteAdapter noteAdapter = new NoteAdapter(getContext().getApplicationContext(), Note.nonDeletedNotes());
    noteListView.setAdapter(noteAdapter);
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/531995.html

標籤:爪哇安卓安卓片段

上一篇:為什么下面的代碼會拋出IllegalFormatConversionException錯誤?

下一篇:無法對表示為Lambda運算式的供應商呼叫get()

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more