1

このコードはJavaで正常に機能しますが、Android 4.0エミュレーターで実行を開始すると、クラッシュします。デバッグ中に、httpConn.connect()でクラッシュしたことに気づきました。ライン

  public class GetStringFromUrl {
public static String getString(String urlPageAdress) throws Exception
{

    URL url = new URL(urlPageAdress);
     HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
      urlConn.setRequestProperty("Accept-Encoding", "UTF-8");
     HttpURLConnection httpConn = (HttpURLConnection) urlConn;
      httpConn.setAllowUserInteraction(false);
     httpConn.connect(); //crashes on this line dunno know why

     InputStream in = null;

     if (httpConn.getContentEncoding() != null && httpConn.getContentEncoding().toString().contains("gzip")) {
     in = new GZIPInputStream(httpConn.getInputStream());
      } else {
      in = httpConn.getInputStream();
    }
     BufferedInputStream bis = new BufferedInputStream(in);
     ByteArrayBuffer baf = new ByteArrayBuffer(1000);
     int read = 0;
      int bufSize = 1024;
      byte[] buffer = new byte[bufSize];
     while (true) {
      read = bis.read(buffer);
      if (read == -1) {
    break;
      }
     baf.append(buffer, 0, read);



     }
      String body = new String(baf.toByteArray());
    return body;
} }

メソッドはメインアクティビティで使用されます

パブリッククラスMainActivityはActivity{を拡張します

ToggleButton  toogleButton;
 public final static String EXTRA_MESSAGE = "ru.kazartsevaa.table.MESSAGE";
int upDown;
int SpinnerCount;
  @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    upDown=0;


    setContentView(R.layout.activity_main);
}

public void onClick(View v)は例外をスローします{System.out.print(SpinnerCount); // if(upDown == 0)//0-вылет1прилет// {switch(v.getId()){case R.id.UpDownButton:{// toogleButton =(ToggleButton)findViewById(R.id.UpDownButton ); // toogleButton.setOnCheckedChangeListener(this); } case R.id.SheremetievoButton:{Spinner SherSpinner =(Spinner)findViewById(R.id.SheremetievoSpinner);

                    String SpinnerCount= SherSpinner.getItemAtPosition(SherSpinner.getSelectedItemPosition()).toString();
                    System.out.print(SpinnerCount);
                    new Thread(){ public void run() { 
                        try {
                            String body = GetStringFromUrl.getString("www.xyz.com");
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        } }.start();

                        int crowd;






                }

        }

注:新しいスレッドに変更した後、それはクラッシュを停止しましたが、それでも書き込みます

4

1 に答える 1

2

メインスレッドでこれを行っていますか?これを別のスレッドで実行すると機能するはずです。

    public void onClick(View v) {
    try{
            new Thread(){
                    public void run() {
                        GetStringFromUrl.getString("www.xyz.com");                      
                    }
            }.start();
    }catch(Exception e){
        e.printStackTrace();
    }
}
于 2012-10-21T15:42:25.127 に答える