【发布时间】:2015-11-06 13:59:51
【问题描述】:
我编写了一个简单的代码来从服务器获取响应。它在 IntelliJ Idea IDE 上运行良好并返回预期结果。代码:
import sun.org.mozilla.javascript.internal.json.JsonParser;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainCode {
public static void main(String... args){
InputStream inputStream = null;
HttpURLConnection urlConnection = null;
Integer result = 0;
Integer statusCode = 50;
String response="";
try{
URL url = new URL("http://127.0.0.1/Customers/getAllCustomers.php");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
statusCode = urlConnection.getResponseCode();
if (statusCode == 200) {
inputStream = new BufferedInputStream(urlConnection.getInputStream());
response = convertInputStreamToString(inputStream);
// parseResult(response);
result = 1; // Successful
}else{
result = 0; //"Failed to fetch data!";
}
} catch (Exception e){
}
System.out.print(response);
}
private static String convertInputStreamToString(InputStream inputStream) throws IOException {
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
String line = "";
String result = "";
while((line = bufferedReader.readLine()) != null){
result += line;
}
/* Close Stream */
if(null!=inputStream){
inputStream.close();
}
return result;
}
}
但是,当我将此代码复制并粘贴到 android studio 时,此代码停止工作。在我的观察中,try 块永远不会执行,因为当我将它分配给 textView 时,statusCode 输出显示为 50。这是android工作室的代码:
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView)findViewById(R.id.textView);
textView.setText(callThis());
}
private static String callThis(){
InputStream inputStream = null;
HttpURLConnection urlConnection = null;
Integer result = 0;
Integer statusCode = 50;
String response="";
try{
URL url = new URL("http://127.0.0.1/Customers/getAllCustomers.php");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
statusCode = urlConnection.getResponseCode();
if (statusCode == 200) {
inputStream = new BufferedInputStream(urlConnection.getInputStream());
response = convertInputStreamToString(inputStream);
// parseResult(response);
result = 1; // Successful
}else{
result = 0; //"Failed to fetch data!";
}
} catch (Exception e){
}
return statusCode+response;
}
private static String convertInputStreamToString(InputStream inputStream) throws IOException {
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
String line = "";
String result = "";
while((line = bufferedReader.readLine()) != null){
result += line;
}
/* Close Stream */
if(null!=inputStream){
inputStream.close();
}
return result;
}
}
更新代码:使用 AsyncTask
public class MainActivity extends Activity {
private static final String TAG = "Http Connection";
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.textView);
new AsyncHttpTask().execute();
}
public class AsyncHttpTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
InputStream inputStream = null;
HttpURLConnection urlConnection = null;
Integer result = 0;
String response="";
int statusCode = 10;
try {
/* forming th java.net.URL object */
URL url = new URL("http://127.0.0.1/Customers/getAllCustomers.php");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
statusCode = urlConnection.getResponseCode();
/* 200 represents HTTP OK */
if (statusCode == 200) {
inputStream = new BufferedInputStream(urlConnection.getInputStream());
response = convertInputStreamToString(inputStream);
result = 1; // Successful
}else{
result = 0; //"Failed to fetch data!";
}
} catch (Exception e) {
Log.d(TAG, e.getLocalizedMessage());
}
return response + statusCode; //"Failed to fetch data!";
}
@Override
protected void onPostExecute(String result) {
/* Download complete. Update UI */
textView.setText(result);
}
}
private String convertInputStreamToString(InputStream inputStream) throws IOException {
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
String line = "";
String result = "";
while((line = bufferedReader.readLine()) != null){
result += line;
}
/* Close Stream */
if(null!=inputStream){
inputStream.close();
}
return result;
}
}
Logcat:
08-13 21:11:21.898 1233-2167/? V/WindowManager﹕ Adding window Window{bd59a00 u0 com.cheatsheet.servercheck/com.cheatsheet.servercheck.MainActivity} at 2 of 6 (before Window{18c764e7 u0 Starting com.cheatsheet.servercheck})
08-13 21:11:21.904 2453-2468/? D/Http Connection﹕ failed to connect to /127.0.0.1 (port 80): connect failed: ECONNREFUSED (Connection refused)
08-13 21:11:21.945 2453-2469/? D/﹕ HostConnection::get() New Host Connection established 0xb43e0130, tid 2469
08-13 21:11:21.958 2453-2469/? I/OpenGLRenderer﹕ Initialized EGL, version 1.4
08-13 21:11:21.995 2453-2469/? D/OpenGLRenderer﹕ Enabling debug mode 0
08-13 21:11:22.015 2453-2469/? W/EGL_emulation﹕ eglSurfaceAttrib not implemented
08-13 21:11:22.015 2453-2469/? W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xb43cd940, error=EGL_SUCCESS
08-13 21:11:22.667 1233-1256/? I/ActivityManager﹕ Displayed com.cheatsheet.servercheck/.MainActivity: +950ms
【问题讨论】:
-
当一个人抓住
Exception e并且不关心它时会发生这种情况 -
@dotvav 如果 try 块正在执行,statusCode 不会相应改变吗?
-
如果异常被抛出之前你分配
statusCode一个值。 -
@dieter_h 你是什么意思?怎么不在主线程上运行?
-
您正在主线程上运行网络代码。安卓不允许。查看您的 logcat 错误...
标签: java android android-studio intellij-idea