是否应在后台下载JSON?

时间:2019-04-08 11:58:56

标签: java android

用户按下按钮后,它将启动天气功能。但是它不会记录任何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);
}

}

2 个答案:

答案 0 :(得分:0)

您绝对应该在后台加载数据。主线程(即UI线程)是呈现UI组件的线程,因此不应在此处进行繁重的操作。如果在UI线程中完成了繁重的操作,它将冻结UI。

您应该查看AsyncTask类以在后台执行加载。

以下是一些不错的教程:

答案 1 :(得分:0)

所有io操作都应在后台执行,因为所有这些操作都很耗时。这意味着如果您不在后台执行这些代码,将会阻塞您的主线程,并可能导致Android Not Respond异常。 ui线程中的IO操作通常会导致不良的用户体验。因此,我强烈建议您在后台执行此操作。