在我的 Toast 中显示 null
Show a null in my Toast
我是 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();
}
您正在开始 async
操作,当您的 toast 显示任务尚未完成且 json
字段仍为 null
试试这个
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();
}
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();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, json, Toast.LENGTH_SHORT).show();
}
});
} catch (Exception e) {
Log.d("tag", e.toString());
}
}
});
thread.start();
}
字段 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 线程上不是 运行 它将崩溃。
我是 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();
}
您正在开始 async
操作,当您的 toast 显示任务尚未完成且 json
字段仍为 null
试试这个
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();
}
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();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, json, Toast.LENGTH_SHORT).show();
}
});
} catch (Exception e) {
Log.d("tag", e.toString());
}
}
});
thread.start();
}
字段 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 线程上不是 运行 它将崩溃。