Java 尝试使用来自片段的MainActivity的方法插入到数据库

Java 尝试使用来自片段的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; @

我是fragment的新手,我想用MainActivity的方法将fragment中的一些数据插入数据库

这是我的密码 LaporanFragment

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