我正在尝试使用HttpURLConnection从URL中读取一些信息,但是,当我尝试运行它时,我得到:
java.lang.RuntimeException:无法启动活动 ComponentInfo {...}:java.lang.NullPointerException:println需要一个 消息。
我已经看到了很多可以做到这一点的例子,那是什么问题呢?我已经仔细检查过该网址,当我将其复制/粘贴到Web浏览器时,我得到了我应该得到的消息,没有问题。我使用相同的URL将信息获取到其他程序(用C ++编写),并且在那里工作正常。是否有我错过的连接设置?
这是代码,问题发生在“ InputStream stream = connection.getInputStream();”:
public String download_organisations(String url){
String jsonString = "";
try {
if(!url.startsWith("http://")){
url = "http://" + url;
}
if(url.endsWith("/")){
url = url.substring(0, url.lastIndexOf("/"));
}
url = url + SystemStatic.URL_SERVICE_WEB_ORGANISATION_MANAGER;
Log.d("OrganisationManager-Android","url: " + url);
URL httpUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection) httpUrl.openConnection();
connection.setConnectTimeout(10000);
InputStream stream = connection.getInputStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[1024];
while ((nRead = stream.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
byte[] inputStreamByteArray = buffer.toByteArray();
byte[] base64 = Base64.decode(inputStreamByteArray, 0);
byte[] decrypted = CipherUtils.decrypt(base64);
jsonString = decrypted.toString();
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
Log.d("OrganisationManager-Android", "Download succeded with response: " + connection.getResponseCode());
} else {
Log.d("OrganisationManager-Android", "Download failed with response: " + connection.getResponseCode());
}
} catch (MalformedURLException e) {
Log.e("OrganisationManager-Android", e.getMessage());
} catch (IOException e) {
Log.e("OrganisationManager-Android", e.getMessage());
} catch (Exception e) {
Log.e("OrganisationManager-Android", e.getMessage());
}
return jsonString;
}
错误堆栈:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.organisationmanager.cin, PID: 2066
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.organisationmanager.cin/com.organisationmanager.ble.ScanningActivity}: java.lang.NullPointerException: println needs a message
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3194)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Caused by: java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.e(Log.java:261)
at com.organisationmanager.ble.common.OrganisationManagerWebPortalCommunicationHelper.download_organisations(OrganisationManagerWebPortalCommunicationHelper.java:210)
at com.organisationmanager.ble.ScanningActivity.onCreate(ScanningActivity.java:184)
at android.app.Activity.performCreate(Activity.java:7372)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3147)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
答案 0 :(得分:1)
错误堆栈显示:
原因:java.lang.NullPointerException:println需要一条消息 在android.util.Log.println_native(本机方法) 在android.util.Log.e(Log.java:261)
从这些行中可以看到,Log.e()
在catch
内的download_organisations()
块之一(引发MalformedURLException
的块)中抛出了异常,或捕获IOException
的一个,或捕获Exception
的一个)。
您可以通过记录catch
块中的消息来处理异常。但是也许他们的消息是null
,所以println
没有要打印的有效消息,并抛出了NullPointerException
。
请尝试改为记录e
,并检查是否再次抛出“ java.lang.NullPointerException: println needs a message
”。这样做:
} catch (IOException e) {
Log.e("OrganisationManager-Android", e.toString());
}
否则,您可以打印捕获的异常的堆栈跟踪:
} catch (IOException e) {
Log.e("OrganisationManager-Android");
e.printStackTrace()
}
答案 1 :(得分:0)
检查清单中的应用是否存在恶意代码?
如果您不使用它 试试吧:
在AndroidManifest中将此代码添加到Tag Apliciation之外
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />