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();
}
}