我是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();
}
答案 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线程上运行,它将崩溃。