【问题标题】:Java code working on IDE but not working in android studioJava 代码在 IDE 上工作,但在 android studio 中不工作
【发布时间】: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


【解决方案1】:

当我使用 127.0.0.1 访问我的服务器时,我无法访问它,因为这也是分配给我的 android 模拟器的 ip。所以代码适用于java IDE,但不适用于模拟器。我必须将其替换为 10.0.2.2 才能使其正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-16
    • 2014-05-14
    • 2017-05-19
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多