ダイアログフラグメントから非同期でネット接続して
ネット上から数値取得した後、ダイアログフラグメントのViewに反映させたいのですが、
エラーが出てアプリが落ちます。
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.app.Activity.findViewById(int)' on a null object reference at com.example.myapplication.ui.home.AsyncHttpRequest.onPostExecute(AsyncHttpRequest.java:62)
DiarogFragment
1@Override 2 public Dialog onCreateDialog(Bundle savedInstanceState) { 3 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 4 LayoutInflater inflater = requireActivity().getLayoutInflater(); 5 View view = inflater.inflate (R.layout.custom_layout, null); 6 textView = (TextView)view.findViewById(R.id.textView5); 7 textView2 = (TextView)view.findViewById(R.id.textView6); 8 button = (Button)view.findViewById(R.id.button2); 9 button.setOnClickListener(new View.OnClickListener() { 10 @Override 11 public void onClick(View view) { 12 PW = rand.nextInt(100000); 13 if (new AsyncHttpRequest(getActivity()) 14 .execute("https://xxxxxxxxxxxxxx.jp" + PW) != null) { 15 textView2.setText(String.valueOf(PW)); 16 } 17 } 18 }); 19builder.setView(view) 20 .setTitle("Pairring") 21 .setPositiveButton("OK", new DialogInterface.OnClickListener() { 22 public void onClick(DialogInterface dialog, int id) { 23 24 } 25 }) 26 .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 27 public void onClick(DialogInterface dialog, int id) { 28 // User cancelled the dialog 29 } 30 }); 31 32 return builder.create(); 33}
AsyncTask
1public AsyncHttpRequest(Activity activity) { 2 mActivity = activity; 3 } 4 5 @Override 6 protected void onPreExecute() { 7 super.onPreExecute(); 8 } 9 10 @Override 11 protected void onPreExecute() { 12 super.onPreExecute(); 13 } 14 15 @Override 16 protected String doInBackground(String... params) { 17 18 HttpURLConnection connection = null; 19 StringBuilder sb = new StringBuilder(); 20 try { 21 URL url = new URL(params[0]); 22 connection = (HttpURLConnection) url.openConnection(); 23 InputStream is = connection.getInputStream(); 24 BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); 25 String line = ""; 26 while ((line = reader.readLine()) != null) 27 sb.append(line); 28 is.close(); 29 } catch (IOException e) { 30 e.printStackTrace(); 31 } finally { 32 connection.disconnect(); 33 } 34 if (sb.toString() == "NO") { 35 return null; 36 } else { 37 return (sb.toString()); 38 } 39 } 40 41 public void onPostExecute(String string) { 42 if (string == null) { 43 ((TextView)mActivity.findViewById(R.id.textView9)).setText("通信に失敗しました。再度接続をお試しください。"); 44 } else { 45 try { 46 int i = Integer.parseInt(string); 47 ((TextView)mActivity.findViewById(R.id.textView5)).setText(String.valueOf(i)); 48 } catch (NumberFormatException e) { 49 } 50 } 51 52 53 }
原因はおそらくmActivityの部分だと思うのですが、フラグメントに対して
どのような処理を行えばいいのかわかりません。
ネットで調べてみましたが、いまいち仕組みがわかりません。
ご教示いただければ幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー