APIから取得した今日、明日の天気をAlertDialogに表示させたいのですが、 下記のコードを入力したところシュミレーターにfalseとdialogで表示されました。 エラーが起きていないので修正すべき箇所がわからないのですが、このような場合はどこを見直すべきでしょうか。
import android.annotation.SuppressLint import android.os.AsyncTask import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import org.json.JSONObject import java.io.BufferedReader import java.io.InputStream import java.io.InputStreamReader import java.net.HttpURLConnection import java.net.URL @Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS") class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) Log.i("MainActivity", "onCreate") val receiver = WeatherInfoReceiver() receiver.execute("130010") } @SuppressLint("StaticFieldLeak") private inner class WeatherInfoReceiver(): AsyncTask<String, String, String>() { override fun doInBackground(vararg params: String?): String { Log.i("MainActivity", "doInBackground") val id = params[0] val urlStr = "http://weather.livedoor.com/forecast/webservice/json/v1?city=${id}" val url = URL(urlStr) val con = url.openConnection() as HttpURLConnection con.requestMethod = "GET" con.connect() val stream = con.inputStream val result = is2String(stream) con.disconnect() stream.close() return result } override fun onPostExecute(result: String?) { Log.i("MainActivity", "onPostExecute") val rootJSON = JSONObject(result) val forecasts = rootJSON.getJSONArray("forecasts") for (i in 0..1) { val forecastsNow = forecasts.getJSONObject(i) Log.i("MainActivity", "$i") val telop = forecastsNow.getString("telop") Log.i("MainActivity", "telop:$telop") //val text1 = findViewById<TextView>(R.id.text1) //text1.text = telop val dialogFragment = TestDialogFragment() val args = Bundle() args.putString("telop", telop) dialogFragment.arguments = args dialogFragment.show(supportFragmentManager, "TestDialogFragment") } } } private fun is2String(stream: InputStream): String { Log.i("MainActivity", "is2String") val sb = StringBuilder() val reader = BufferedReader(InputStreamReader(stream, "UTF-8")) var line = reader.readLine() while (line != null) { sb.append(line) line = reader.readLine() } reader.close() return sb.toString() } }
import android.app.AlertDialog import android.app.Dialog import android.os.Bundle import android.util.Log import androidx.fragment.app.DialogFragment class TestDialogFragment : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { Log.i("MainActivity", "onCreateDialog") val builder = AlertDialog.Builder(activity) val telop = arguments?.getString("telop") return builder.create() } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
質問するときのヒント( https://teratail.com/help/question-tips )をよく読んで質問内容を整理しましょう。
ログ出力処理を各所に仕込んでいるようですが、どこまでが想定通りでどこからが想定外か整理できますか?
ご指摘ありがとうございます。
現在ログを仕込んでいることもあり、APIから天気を取得するところまでは理解、確認ができております。
あとはダイアログに表示するだけだと考えonCreateDialogの中にbuilder.setMessage(R.id.text1)を書いてみたのですが、
それではうまくいきませんでした。
そのためAPIから欲しい情報を引っ張ってこれた点までは想定内でしたが、
そこから先ダイアログに表示する点が想定外と整理いたしました。
回答1件
あなたの回答
tips
プレビュー