0

次のコードでは、ローカルホストでコーディングしてホストしているWebサービスでGET操作を実行しようとしています。OpenHttpConnectionメソッドは問題なく機能しています。これは、トーストを間に置いて、そこにsthが間違っているかどうかを確認しているためです。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

}

また、logcatは次のとおりです。

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
4

3 に答える 3

0

これはあなたを助けるかもしれません。

   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) {}
于 2012-10-14T16:36:55.620 に答える
0

私の問題は解決しました。問題はバッファリーダーではありませんでしたが、接続が拒否されました。私が渡したリンクがlocalhost(私のマシン)を参照していたため、接続が拒否されていました。しかし実際には、Android は localhost をエミュレータ自体として使用し、ホストされているサーバーがなかったため、接続を拒否し続けました。これに対する解決策は、ローカルホストの代わりに自分のマシンの IP を使用したため、http://xxxx/ ......

于 2012-10-14T18:12:16.183 に答える
0

ログには、次のような情報が表示されます。

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 以外の Log を使用することをお勧めします。

于 2012-10-14T16:42:27.020 に答える