【问题标题】:Android cant get a server connectionAndroid无法获得服务器连接
【发布时间】:2015-10-29 19:28:24
【问题描述】:

我正在尝试与服务器建立连接。但它没有连接或建立连接。

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;


public class MainActivity extends ActionBarActivity {

TextView text;
String http_url = "http://sampleprogramz.com";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    text = (TextView) findViewById(R.id.textView2);

    try {

        URL url = new URL(http_url);
        executeReq(url);

        text.setText("HttpURLConnection Available");
    }
    catch(Exception e) {

        text.setText("Connection Failed");
    }
}

private void executeReq(URL url) throws IOException {
    // TODO Auto-generated method stub

    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setReadTimeout(3000);
    con.setConnectTimeout(3500);
    con.setRequestMethod("GET");
    con.setDoInput(true);

    // Connect
    con.connect();
}
}

这里我试图询问程序是否有连接。 我的 AndroidManifest.xml 文件中也有 Internet 权限。 你知道为什么这不起作用吗?

这里有我的 LogCat 的文件,但我不确定这是否是正确的文件,因为我是新人:

08-06 16:12:15.931: I/art(29675): Background sticky concurrent mark sweep GC freed 4988(324KB) AllocSpace objects, 0(0B) LOS objects, 28% free, 798KB/1117KB, paused 6.482ms total 239.323ms
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675): I got an error
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675): android.os.NetworkOnMainThreadException
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at java.net.InetAddress.getAllByName(InetAddress.java:215)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at com.android.okhttp.HostResolver$1.getAllByName(HostResolver.java:29)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:272)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at com.example.david.simpleserverrequest.MainActivity.executeReq(MainActivity.java:54)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at com.example.david.simpleserverrequest.MainActivity.onCreate(MainActivity.java:31)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at android.app.Activity.performCreate(Activity.java:5990)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at android.app.ActivityThread.access$800(ActivityThread.java:151)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at android.os.Handler.dispatchMessage(Handler.java:102)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at android.os.Looper.loop(Looper.java:135)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at android.app.ActivityThread.main(ActivityThread.java:5257)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at java.lang.reflect.Method.invoke(Native Method)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at java.lang.reflect.Method.invoke(Method.java:372)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
08-06 16:12:16.068: E/YOUR_APP_LOG_TAG(29675):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
08-06 16:12:17.427: D/gralloc_goldfish(29675): Emulator without GPU emulation detected.
08-06 16:12:17.451: I/art(29675): Background partial concurrent mark sweep GC freed 882(120KB) AllocSpace objects, 0(0B) LOS objects, 52% free, 910KB/1934KB, paused 1.354ms total 284.542ms

【问题讨论】:

  • 你怎么知道你没有连接?
  • 错误信息是什么?但是,您应该将连接代码放入 asynctask
  • 请在您的 catch 子句中添加e.printStackTrace(),然后将输出编辑到您的问题中,这样我们就可以实际帮助您而不是玩 20 个问题。
  • 这几乎可以肯定是stackoverflow.com/questions/6343166/…
  • @Arlind 它说使用 settext Methode 连接失败

标签: android server httpurlconnection


【解决方案1】:

有一个库可以处理连接并处理所有与连接相关的问题,而不是手动操作。尝试使用http://loopj.com/android-async-http/

【讨论】:

    【解决方案2】:

    您正在尝试调用主线程上的方法。您需要在后台处理程序或新线程中执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-12
      • 2014-10-27
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 2016-06-30
      相关资源
      最近更新 更多