用户按下按钮后,它将启动天气功能。但是它不会记录任何JSON数据或任何错误。应该在后台完成吗?我使用gson libary下载JSON。
编辑:我编辑了我的代码,但是用户必须输入粘贴到链接上的城市。轻按一下按钮是否可以在后台进程中运行?
public class MainActivity extends AppCompatActivity {
public class Download extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... strings) {
try {
URL url = new URL("api.openweathermap.org/data/2.5/weather?q="+strings[0]+"&APPID=****");
URLConnection request = url.openConnection();
request.connect();
JsonParser jp=new JsonParser();
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent()));
JsonObject rootobj = root.getAsJsonObject();
String weather = rootobj.getAsString();
Log.i("weather:",weather);
}
catch (Exception e){
e.printStackTrace();;
}
return null;
}
}
public void weather(View view){
TextView textView=(TextView) findViewById(R.id.editText);
String city=textView.getText().toString();
Download download=new Download();
download.execute(city);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
答案 0 :(得分:0)
您绝对应该在后台加载数据。主线程(即UI线程)是呈现UI组件的线程,因此不应在此处进行繁重的操作。如果在UI线程中完成了繁重的操作,它将冻结UI。
您应该查看AsyncTask类以在后台执行加载。
以下是一些不错的教程:
答案 1 :(得分:0)
所有io操作都应在后台执行,因为所有这些操作都很耗时。这意味着如果您不在后台执行这些代码,将会阻塞您的主线程,并可能导致Android Not Respond异常。 ui线程中的IO操作通常会导致不良的用户体验。因此,我强烈建议您在后台执行此操作。