【发布时间】:2014-12-24 17:12:37
【问题描述】:
我正在尝试转换 URL 的内容并将其用作字符串来创建一个 toast,所有这些都由一个按钮调用。
@Override
public void onClick(View arg0) {
String ExampleURL = ("http://pastebin.com/raw.php?i=ty0h7cS2");
HttpClient httpClient = new DefaultHttpClient();
HttpGet get = new httpGet(ExampleURL);
HttpResponse response = null;
try {
response = httpClient.execute(get);
} catch (IOException e) {
e.printStackTrace();
}
String ExampleURLContent = null;
try {
ExampleURLContent = EntityUtils.toString(response.getEntity());
} catch (IOException e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "10 + 10 = " + ExampleURLContent, Toast.LENGTH_SHORT).show();
}
它可以编译,但是单击按钮会强制关闭。日志猫:
java.lang.NullPointerException: Attempt to invoke virtual method
'boolean java.net.URI.isAbsolute()' on a null object reference
at org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:496)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
at de.dotwee.kwsolver.MainActivity$1.onClick(MainActivity.java:54)
that is this line --> (response = httpClient.execute(get);)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
有什么帮助吗?另外,有没有更简单、代码更少的方法?
【问题讨论】:
-
我不确定这是否是您的确切问题,但从您的示例来看,您正在 UI 线程上执行 Web 请求。您应该将您的请求包装在 AsyncTask 中,它可能会解决您的问题。看到这篇文章,stackoverflow.com/a/20159968/1296369
-
@kevskree 你是对的!包装在 AsyncTask 中确实有效。谢谢! stackoverflow.com/questions/16994777/…