【问题标题】:Android - web request not working and application stop workingAndroid - 网络请求不起作用并且应用程序停止工作
【发布时间】:2015-07-26 07:16:42
【问题描述】:

我有一个 android 应用程序,我想从服务器获取请求并将其显示给用户,但它不工作并且应用程序停止工作。这是我的代码:

 URL url;
    try {
        url = new URL("http://accounting.hamyar.net/IBSng/user/index.php?normal_username=7325238658&normal_password=hamidreza3329");
        URLConnection conn = url.openConnection();
        conn.setRequestProperty("Cookie", "IBS_SESSID=hlpjpnm8hdrf84n7igk0m5n9v6; session_id=f49f028f0c3b87719638136ce5cd5f23090eca5e");
        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

        String inputLine;

        while ((inputLine = br.readLine()) != null) {
            if (inputLine.contains("<td class=") && inputLine.contains("Middle") && inputLine.contains("<sub>"))
            {
                String chargenum =  getBetween(inputLine, "<td class=\"List_Col\" valign=\"Middle\" >", "<sub>").trim();

                String chargeunit = getBetween(inputLine, "<sub>", "</sub>");
                String gig = chargenum.trim() + chargeunit.trim();
                System.out.println("Your gig is "+gig);
            }
        }
        br.close();



    } catch (IOException e) {
    }
}
public static String getBetween(String str, String open, String close) {
    if (str == null || open == null || close == null) {
        return null;
    }
    int start = str.indexOf(open);
    if (start != -1) {
        int end = str.indexOf(close, start + open.length());
        if (end != -1) {
            return str.substring(start + open.length(), end);
        }
    }
    return null;
}

【问题讨论】:

  • 您是否在清单文件中添加了 INTERNET 权限?
  • 在之后添加

标签: android url web get request


【解决方案1】:

您必须在 AndroidManifest.xml 外部的 Application 标记中添加 Internet 权限,如下所示:

<uses-permission android:name="android.permission.INTERNET" /> 

【讨论】:

  • 我还没有 adb .how to logcat?
  • 您可以直接从 Android Studio 或 Eclipse IDE 中查看 Logcat。如果没有 Logcat,就很难确定确切的问题。
【解决方案2】:

您是否在线程中运行它,因为它看起来不像。尝试在异步任务中运行它。尝试将以下代码作为类添加到您的项目中:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

import android.os.AsyncTask;

public class MyBackgroundTask extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... params) {
        URL url;
        try {
            url = new URL(
                    "http://accounting.hamyar.net/IBSng/user/index.php?normal_username=7325238658&normal_password=hamidreza3329");
            URLConnection conn = url.openConnection();
            conn.setRequestProperty(
                    "Cookie",
                    "IBS_SESSID=hlpjpnm8hdrf84n7igk0m5n9v6; session_id=f49f028f0c3b87719638136ce5cd5f23090eca5e");
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    conn.getInputStream()));

            String inputLine;

            while ((inputLine = br.readLine()) != null) {
                if (inputLine.contains("<td class=")
                        && inputLine.contains("Middle")
                        && inputLine.contains("<sub>")) {
                    String chargenum = getBetween(inputLine,
                            "<td class=\"List_Col\" valign=\"Middle\" >",
                            "<sub>").trim();

                    String chargeunit = getBetween(inputLine, "<sub>", "</sub>");
                    String gig = chargenum.trim() + chargeunit.trim();
                    System.out.println("Your gig is " + gig);
                }
            }
            br.close();

        } catch (IOException e) {
        }

        return "";
    }

    public static String getBetween(String str, String open, String close) {
        if (str == null || open == null || close == null) {
            return null;
        }
        int start = str.indexOf(open);
        if (start != -1) {
            int end = str.indexOf(close, start + open.length());
            if (end != -1) {
                return str.substring(start + open.length(), end);
            }
        }
        return null;
    }

}

然后像这样从您的活动中调用它:new MyBackgroundTask().execute();

【讨论】:

  • 我可以运行确切的 sn-p 代码(我从原始问题 BTW 中挑选出来的)就好了。从日志中,您似乎遇到了类转换异常。所以让我问一下,您是否尝试从 backgroundTask 中检索结果?因为如果是这样,你肯定会走错路。
  • 我想获取网页源和进程。
  • @HamidrezaKavehpishghadam 尝试在您的 onCreate 中使用 String backgroundResult = new MyBackgroundTask().execute().get();,然后查看 backgroundResult 字符串的内容。它是一个空字符串还是你仍然得到一个异常?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
相关资源
最近更新 更多