Java 尝试使用来自片段的MainActivity的方法插入到数据库
我是fragment的新手,我想用MainActivity的方法将fragment中的一些数据插入数据库 这是我的密码 LaporanFragmentJava 尝试使用来自片段的MainActivity的方法插入到数据库,java,android,android-fragments,Java,Android,Android Fragments,我是fragment的新手,我想用MainActivity的方法将fragment中的一些数据插入数据库 这是我的密码 LaporanFragment public class LaporanFragment extends Fragment{ EditText judulL, isiL; TextView nomor_ktp, ambilNama; ImageView fotoL; Button kirim; private ProgressDialog progressDialog; @
public class LaporanFragment extends Fragment{
EditText judulL, isiL;
TextView nomor_ktp, ambilNama;
ImageView fotoL;
Button kirim;
private ProgressDialog progressDialog;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_laporan, container, false);
judulL = (EditText) v.findViewById(R.id.judulLaporan);
isiL = (EditText) v.findViewById(R.id.isiLaporan);
nomor_ktp = (TextView) getActivity().findViewById(R.id.nomor_ktp);
final String noktp = nomor_ktp.getText().toString();
//fotoL = (ImageView) v.findViewById(R.id.foto_laporan);
final String jdlLaporan = judulL.getText().toString();
final String isiLaporan = isiL.getText().toString();
kirim = (Button) v.findViewById(R.id.kirim_laporan);
kirim.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
((MainActivity)getActivity()).kirim_lapor(jdlLaporan, isiLaporan, noktp);
}
});
return v;
}
和主要活动采用kirim_-lapor法
public void kirim_lapor(final String judul, final String isi, final String username){
StringRequest stringRequest = new StringRequest(Request.Method.POST,
Constants.URL_LAPOR,
new Response.Listener<String>(){
@Override
public void onResponse(String response){
//progressDialog.dismiss();
try{
JSONObject jsonObject = new JSONObject(response);
//Toast.makeText(LaporanFragment.this, jsonObject.getString("message"), Toast.LENGTH_LONG).show();
}catch(JSONException e){
e.printStackTrace();
}
}
},
new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError error){
//progressDialog.hide();
//Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("judul_laporan", judul);
params.put("isi_laporan", isi);
params.put("no_ktp", username);
return params;
}
};
RequestHandler.getInstance(this).addToRequestQueue(stringRequest);
}
public void kirim_lapor(最终字符串judul、最终字符串isi、最终字符串username){
StringRequest StringRequest=新StringRequest(Request.Method.POST,
Constants.URL_LAPOR,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
//progressDialog.disclose();
试一试{
JSONObject JSONObject=新JSONObject(响应);
//Toast.makeText(LaporanFragment.this,jsonObject.getString(“消息”),Toast.LENGTH_LONG.show();
}捕获(JSONException e){
e、 printStackTrace();
}
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
//progressDialog.hide();
//Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG.show();
}
}){
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数put(“judul_laporan”,judul);
参数put(“isi_laporan”,isi);
参数put(“no_ktp”,用户名);
返回参数;
}
};
RequestHandler.getInstance(this).addToRequestQueue(stringRequest);
}
问题是,当我按fragment中的按钮时,应用程序将崩溃
请帮帮我,抱歉我的英语不好。要本地化并阻止进一步的错误,不要通过调用
getActivity()
调用MainActivity方法,你应该制作一个侦听器来告诉活动有关数据的信息
在片段中为侦听器创建接口:
public class LaporanFragment extends Fragment {
private LaporanListener mListener;
// Define a Listener to 'speak up' to the main activity
public interface LaporanListener {
public void onSendReportClicked(String title, String content, String idNumber);
}
...
}
单击sendReport按钮时,请使用侦听器:
public class LaporanFragment extends Fragment {
...
...
kirim.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
mListener.onSendReportClicked(jdlLaporan, isiLaporan, noktp);
}
});
...
...
}
然后,您需要实现MainActivity的接口侦听器:
public class MainActivity extends Activity implements LaporanFragment.LaporanListener {
...
@Override
public void onSendReportClicked(String title, String content, String idNumber) {
// MainActivity will receive the data here.
// You need to process here.
}
...
}
如需进一步阅读,请阅读。将stacktrace与异常放在此处当我尝试单击按钮时,应用程序仍然崩溃,它显示:
E/AndroidRuntime(24882):致命异常:main E/AndroidRuntime(24882):Process:com.example.banifhalvi.mediajenggala,PID:24882 E/AndroidRuntime(24882):java.lang.NullPointerException:尝试调用接口方法'void com.example.banifhalvi.mediajenggala.LaporanFragment$LaporanListener.onSendReportClicked(java.lang.String,java.lang.String,java.lang.String,java.lang.String)'(24882):在com.example.banifhalvi.mediajenggala.LaporanFragment$1.onClick(LaporanFragment.java:70)
错误com.example.banifhalvi.mediajenggala.LaporanFragment$1.onCl中第70行的代码是什么ick(LaporanFragment)。java:70)
?,您是否在活动中实现了接口?片段是否添加到活动中?代码是mListener.onSendReportClicked(jdlaporan,isiLaporan,noktp);
。是的,我在活动中实现了接口并添加到活动检查这行nomor_ktp=(TextView)getActivity()。findViewById(R.id.nomor_ktp);
,将其更改为nomor_ktp=(TextView)v.findViewById(R.id.nomor_ktp);