Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android NullPointerException当我使用选项卡滚动PagerView时_Android_Database_Android Fragments_Nullpointerexception - Fatal编程技术网

Android NullPointerException当我使用选项卡滚动PagerView时

Android NullPointerException当我使用选项卡滚动PagerView时,android,database,android-fragments,nullpointerexception,Android,Database,Android Fragments,Nullpointerexception,我在另一个应用程序中使用了相同的代码,但效果很好,我不明白为什么在这里我会收到NullPointerException。 这是我第一次使用片段,也许我写错了什么! 下面是代码 这是我的第三个片段 import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.net

我在另一个应用程序中使用了相同的代码,但效果很好,我不明白为什么在这里我会收到
NullPointerException
。 这是我第一次使用
片段
,也许我写错了什么! 下面是代码

这是我的第三个片段

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.io.IOException;
import java.util.List;


public class ThreeFragment extends Fragment {

    public  MySQLiteHelper db = new MySQLiteHelper(getContext());
    public List<VotiEsami> esami;
    public VotiEsamiAdapter adapter; //Adapter per caricare la listview di voti

    public ThreeFragment() {
        // Required empty public constructor
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

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

        //Find the listview
        final ListView listView = (ListView)view.findViewById(R.id.voti_listView);

        //Get all exams inside database
        esami = db.getVotiEsami();
        adapter = new VotiEsamiAdapter(getContext(), R.layout.listview_voti_line, null);

        listView.setAdapter(adapter);

        //TODO gestire cancellazione del voto dal DB e dalla listview




        Button nuovo_voto = (Button) view.findViewById(R.id.button_add_new_voto);
        nuovo_voto.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                //Start Dialog for input the new vote
                Intent myIntent = new Intent(getActivity(), DialogAddVotoEsame.class);
                ThreeFragment.this.startActivityForResult(myIntent, 1);

            }
        });



        return view;
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == 1) {
            if (resultCode == Activity.RESULT_OK) {

                String result_nome = data.getStringExtra("result_name_esame"); //Take the materia from Dialog
                int result_cfu = data.getIntExtra("result_cfu_esame", 1); //Take the materia from Dialog
                int result_voto = data.getIntExtra("result_voto_esame", 1); //Take the materia from Dialog

                //Add exam with vote to DB
                db.addEsameVoto(new VotiEsami(result_nome, result_cfu, result_voto));

                //Refresh list
                List<VotiEsami> newesame = db.getVotiEsami();

                //Aggiorno la Listview dell'activity con il nuovo inserimento
                esami.clear();
                esami.addAll(newesame);
                adapter.notifyDataSetChanged();

            }

        }
    }//onActivityResult

}
有人能告诉我史诗般的失败在哪里吗?
谢谢。

我想您可能需要在
onCreate()方法中初始化
db
对象

onCreate() 
系统在创建片段时调用此函数。在内部 在您的实现中,您应该初始化 暂停片段时要保留的片段,或 停止,然后继续

所以你可以这样做:

public class ThreeFragment extends Fragment {

    public  MySQLiteHelper db;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        db = new MySQLiteHelper(getContext());
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Your code
        esami = db.getVotiEsami();
    }
}

但我在类的顶部初始化…就像一个全局变量<代码>公共MySQLiteHelper db=newmysqlitehelper(getContext())公共列表esami
公共语音适配器
onCreate()
被调用更多,例如当片段恢复时。您的初始化只被调用一次。我有一个问题,如果我将db声明为
onCreate()
方法,我无法从
onCreateView()
onActivityResult()
访问它。如何声明if并使其在所有
ThreeFragment.java
类中可见?将其作为类字段进行全局声明,但在
onCreate
中对其进行初始化。您能发布一些代码以便我更好地理解您所说的吗?谢谢
onCreate() 
public class ThreeFragment extends Fragment {

    public  MySQLiteHelper db;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        db = new MySQLiteHelper(getContext());
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Your code
        esami = db.getVotiEsami();
    }
}