编译器跳过尝试括号?

时间:2017-10-06 12:25:42

标签: java android

所以我有这个小应用程序只应在按下“btnHit”按钮后在Textview“tvJsonItem”中显示一个JSON-Object(甚至不解析它)。我已经内置了多个Toasts来遵循它的程序,但是如果我按下按钮,我只能从onPostExecute获得Toast Test1。好像程序跳过了整个试验支架。

    public class MainActivity extends AppCompatActivity {

private TextView tvData;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button btnHit = (Button) findViewById(R.id.btnHit);
    tvData = (TextView) findViewById(R.id.tvJsonItem);
}

public void onClick(View view) {
    new JSONTask().execute();
    Toast.makeText(getApplicationContext(), "onClick", Toast.LENGTH_LONG);
}


public class JSONTask extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String...params) {

        HttpURLConnection connection = null;
        BufferedReader reader = null;
        URL url = null;
        try {
            url = new URL("https://jsonparsingdemo-cec5b.firebaseapp.com/jsonData/moviesDemoItem.txt");
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            InputStream stream = connection.getInputStream();
            reader = new BufferedReader(new InputStreamReader(stream));
            Toast.makeText(MainActivity.this, "test2", Toast.LENGTH_LONG).show();
            StringBuffer buffer = new StringBuffer();

            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }
            String result = buffer.toString();
            return result;
        } catch (MalformedURLException e) {
            e.printStackTrace();
            Toast.makeText(getApplicationContext(), "Malformed", Toast.LENGTH_LONG);
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(getApplicationContext(), "IOException", Toast.LENGTH_LONG);
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
    }


    protected void onPostExecute(String result){
    super.onPostExecute(result);
        tvData.setText(result);
        Toast.makeText(getApplicationContext(), "test1", Toast.LENGTH_LONG).show();
    }
}
}    

1 个答案:

答案 0 :(得分:1)

您无法在toast.show()中致电doInBackground,因为toast.show()应拨打Main UI Thread

进行测试,将toast.show()转换为log.d() ...