2017-04-05 82 views
0

IM新手方法,我想与方法从MainActivity试图插入到数据库与MainActivity从片段与片段

这里插入来自片段一些数据到数据库是我的代码 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; 
} 

MainActivity与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); 
} 

问题是当我按按钮kirim在片段中,应用程序将崩溃 请帮助我的家伙,抱歉我的英语不好。

+0

把你的堆栈跟踪与例外这里 –

回答

0

为了本地化和阻止进一步的错误,您应该制作一个监听器来告诉Activity数据,而不是通过调用MainActivity方法来调用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. 
    } 

    ... 
} 

对于进一步的阅读,阅读Creating Custom Listeners

+0

当我试图点击按钮的应用程序仍然崩溃,它说: 'E/AndroidRuntime(24882):致命异常:主要 E/AndroidRuntime(24882):过程:COM .example.banifahlevi.mediajenggala,PID:24882 E/AndroidRuntime(24882):java.lang.NullPointerException:试图调用接口方法'void com.example.banifahlevi.mediajenggala.LaporanFragment $ LaporanListener.onSendReportClicked(java.lang.String ,java.lang.String,java.lang.String)'空对象引用 E/AndroidRuntime(24882):\t at com.example.banifahlevi.mediajenggala.LaporanFragment $ 1.onClick(LaporanFragment.java:70)' –

+0

什么是错误'com.example.banifahle在70行的代码vi.mediajenggala.LaporanFragment $ 1.onCl ICK(LaporanFragment.的java:70)'?你有没有实现在活动界面?片段是否添加到活动中? –

+0

代码是 'mListener.onSendReportClicked(jdlLaporan,isiLaporan,noktp);'。 在活动是我没有实现的接口,并添加到活动 –