[英]android app crashing when trying to convert inputstream to string
在以下代碼中,我試圖在我已編碼並托管在本地主機上的Web服務上執行GET操作。 OpenHttpConnection方法工作得很好,因為我在兩者之間進行了吐司檢查,以了解其中是否存在錯誤。 當我嘗試使用bufferreader將輸入流轉換為字符串時,應用程序崩潰。 請看一下,看看是否可以發現錯誤。
謝謝 :)
public class ServicetestActivity extends Activity {
public static String iStream_to_String(InputStream is1)
{
BufferedReader rd = new BufferedReader(new InputStreamReader(is1));
String line;
StringBuilder sb = new StringBuilder();
try {
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String contentOfMyInputStream = sb.toString();
return contentOfMyInputStream;
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
InputStream is=null;
try {
is=OpenHttpConnection("http://localhost/webservice.php?device=ayaz");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String line= iStream_to_String(is);
Toast.makeText(this, line, Toast.LENGTH_LONG).show();
}
private InputStream OpenHttpConnection(String link) throws IOException {
// TODO Auto-generated method stub
InputStream inputStream = null;
int response = -1;
Toast.makeText(this, "1", Toast.LENGTH_SHORT).show();
URL url = new URL(link);
URLConnection connection = url.openConnection();
Toast.makeText(this, "2", Toast.LENGTH_SHORT).show();
if (!(connection instanceof HttpURLConnection))
throw new IOException("Not a HTTP connection");
try {
HttpURLConnection httpURLConnection = (HttpURLConnection) connection;
Toast.makeText(this, "3", Toast.LENGTH_SHORT).show();
httpURLConnection.setAllowUserInteraction(false);
Toast.makeText(this, "4", Toast.LENGTH_SHORT).show();
httpURLConnection.setInstanceFollowRedirects(true);
httpURLConnection.setRequestMethod("GET");
httpURLConnection.connect();
response = httpURLConnection.getResponseCode();
if (response == HttpURLConnection.HTTP_OK) {
inputStream = httpURLConnection.getInputStream();
}
} catch (Exception e) {
// TODO: handle exception
throw new IOException("Error connecting");
}
return inputStream;}
// see http://androidsnippets.com/executing-a-http-get-request-with-httpclient
}
日志貓也如下所示:
10-14 20:54:13.660: E/AndroidRuntime(1348): FATAL EXCEPTION: main
10-14 20:54:13.660: E/AndroidRuntime(1348): java.lang.RuntimeException: Unable to start activity ComponentInfo{web.service/web.service.ServicetestActivity}: java.lang.NullPointerException
10-14 20:54:13.660: E/AndroidRuntime(1348): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
10-14 20:54:13.660: E/AndroidRuntime(1348): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
10-14 20:54:13.660: E/AndroidRuntime(1348): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-14 20:54:13.660: E/AndroidRuntime(1348): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
10-14 20:54:13.660: E/AndroidRuntime(1348): at android.os.Handler.dispatchMessage(Handler.java:99)
10-14 20:54:13.660: E/AndroidRuntime(1348): at android.os.Looper.loop(Looper.java:130)
10-14 20:54:13.660: E/AndroidRuntime(1348): at android.app.ActivityThread.main(ActivityThread.java:3683)
10-14 20:54:13.660: E/AndroidRuntime(1348): at java.lang.reflect.Method.invokeNative(Native Method)
10-14 20:54:13.660: E/AndroidRuntime(1348): at java.lang.reflect.Method.invoke(Method.java:507)
10-14 20:54:13.660: E/AndroidRuntime(1348): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-14 20:54:13.660: E/AndroidRuntime(1348): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-14 20:54:13.660: E/AndroidRuntime(1348): at dalvik.system.NativeStart.main(Native Method)
10-14 20:54:13.660: E/AndroidRuntime(1348): Caused by: java.lang.NullPointerException
10-14 20:54:13.660: E/AndroidRuntime(1348): at java.io.Reader.<init>(Reader.java:65)
10-14 20:54:13.660: E/AndroidRuntime(1348): at java.io.InputStreamReader.<init>(InputStreamReader.java:122)
10-14 20:54:13.660: E/AndroidRuntime(1348): at java.io.InputStreamReader.<init>(InputStreamReader.java:59)
10-14 20:54:13.660: E/AndroidRuntime(1348): at web.service.ServicetestActivity.iStream_to_String(ServicetestActivity.java:31)
10-14 20:54:13.660: E/AndroidRuntime(1348): at web.service.ServicetestActivity.onCreate(ServicetestActivity.java:65)
10-14 20:54:13.660: E/AndroidRuntime(1348): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-14 20:54:13.660: E/AndroidRuntime(1348): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
10-14 20:54:13.660: E/AndroidRuntime(1348): ... 11 more
這可能對您有幫助。
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
is.close();
return result;
}catch (Exception e) {}
日志顯示信息如下:
FATAL EXCEPTION: main 10-14 20:54:13.660:E/AndroidRuntime(1348):java.lang.RuntimeException:
Unable to start activity ComponentInfo{web.service/web.service.ServicetestActivity}:
java.lang.NullPointerException 10-14 20:54:13.660: E/AndroidRuntime(1348):
接着:
Caused by: java.lang.NullPointerException 10-14 20:54:13.660:
E/AndroidRuntime(1348): at java.io.Reader.(Reader.java:65) 10-14 20:54:13.660:
E/AndroidRuntime(1348): at java.io.InputStreamReader.(InputStreamReader.java:122)
10-14 20:54:13.660: E/AndroidRuntime(1348): at java.io.InputStreamReader.
(InputStreamReader.java:59) 10-14 20:54:13.660: E/AndroidRuntime(1348):
at web.service.ServicetestActivity.iStream_to_String(ServicetestActivity.java:31)
10-14 20:54:13.660: E/AndroidRuntime(1348):
at web.service.ServicetestActivity.onCreate(ServicetestActivity.java:65)
表示您的應用在第行崩潰。 iStream_to_String中的31。 因此,請檢查此行號。 出了什么問題。
對於檢查條件,如果出現問題,請使用Toast以外的其他日志,因為Toast並非用於檢查錯誤。
我的問題解決了。 問題不在緩沖區讀取器中,但我的連接被拒絕了。 該連接被拒絕,因為我傳遞的鏈接引用了localhost(我的機器)。 但是實際上,Android將localhost作為模擬器本身,並且由於沒有托管服務器,因此它一直拒絕連接。 解決方案是我使用了機器的ip而不是localhost,所以它將是http:// xxxx / ......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.