在我的Toast中显示null

时间:2017-05-05 20:59:56

标签: android stringbuilder

我是Android开发中的新手,我运行的是非常简单的应用,但我的Toast显示了null。我检查了我的连接,并且192.168.1.37/get_cat.php在我的浏览器中是正确的。我认为服务器上的所有内容都是正确的并且正常工作。按照我的代码:

public class MainActivity extends AppCompatActivity {
private String line;
private String json;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Json_print();
    Toast.makeText(this, json, Toast.LENGTH_SHORT).show();
}

private void Json_print() {

    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                URL url = new URL("http://192.168.1.37/get_cat.php");
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
                connection.setDoInput(true);
                connection.setConnectTimeout(10000);
                connection.setReadTimeout(10000);

                InputStream inputStream = connection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

                StringBuilder stringBuilder = new StringBuilder();
                JSONObject jsonObject = new JSONObject();
                while ((line = bufferedReader.readLine()) != null) {
                    stringBuilder.append(line);
                }

                json = stringBuilder.toString();

            } catch (Exception e) {
                Log.d("tag", e.toString());
            }
        }
    });

    thread.start();



}

1 个答案:

答案 0 :(得分:0)

字段json为空,因为您的网络调用发生在另一个线程中。当您致电Json_print()时,代码不会等待您创建的Thread内的代码完成,并且会立即拨打Toast

相反,将Toast调用放在一个函数中:

private void showToast() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(this, json, Toast.LENGTH_SHORT).show();
        }
    });
}

在发出网络请求的后台Thread的末尾调用此函数。确保对该功能的调用位于Thread run功能中。请注意确保它在主UI线程上运行的重要性,如果不在UI线程上运行,它将崩溃。