2015-01-16 3 views
0
try { 
     HttpClient httpClient = new DefaultHttpClient(); 
     HttpContext localContext = new BasicHttpContext(); 
     HttpGet httpGet = new HttpGet(wyvernBones); //"http://forums.zybez.net/runescape-2007-prices/3104-wyvern-bones" 
     HttpResponse response = httpClient.execute(httpGet, localContext); 
     String result = ""; 
     BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     fetched = false; 
     progBox.show(); 
     while (!fetched) { 
      line = br.readLine(); 
      if (line.contains("Average Sell Offer")) { 
       Toast.makeText(this, line, Toast.LENGTH_LONG).show(); 
       progBox.dismiss(); 
       fetched = true; 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

Выше первого подхода, который я использовал.Приложение для Android не будет запускать код внутри блока try

public void getItem() throws Exception 
{ 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpContext localContext = new BasicHttpContext(); 
    HttpGet httpGet = new HttpGet(wyvernBones); //"http://forums.zybez.net/runescape-2007-prices/3104-wyvern-bones" 
    HttpResponse response = httpClient.execute(httpGet, localContext); 
    String result = ""; 
    BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
    fetched = false; 
    progBox.show(); 
    while (!fetched) { 
     line = br.readLine(); 
     if (line.contains("Average Sell Offer")) { 
      Toast.makeText(this, line, Toast.LENGTH_LONG).show(); 
      progBox.dismiss(); 
      fetched = true; 
     } 
    } 
} 

После использования следующего кода внутри блока catch catch безрезультатно, вместо этого я помещаю его в метод. Во время отладки я понял, что код внутри блока try/catch даже не обрабатывается/не запускается (?). Что я сделал не так?

e: первый образец был предпринят в методе onCreate, второй образец был вызван при нажатии кнопки.

Весь код;

public class MainActivity extends ActionBarActivity implements OnClickListener{ 

Button btn1; 

ProgressDialog progBox; 
Boolean fetched; 
String line; 

URL url; 

String wyvernBones = "http://forums.zybez.net/runescape-2007-prices/3104-wyvern-bones"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    progBox = new ProgressDialog(this); 
    progBox.setIndeterminate(true); 
    progBox.setTitle("Fetching Data.."); 

    btn1 = (Button) findViewById(R.id.btn1); 
    btn1.setOnClickListener(this); 

    try { 
     HttpClient httpClient = new DefaultHttpClient(); 
     HttpContext localContext = new BasicHttpContext(); 
     HttpGet httpGet = new HttpGet(wyvernBones); //"http://forums.zybez.net/runescape-2007-prices/3104-wyvern-bones" 
     HttpResponse response = httpClient.execute(httpGet, localContext); 
     String result = ""; 
     BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     fetched = false; 
     progBox.show(); 
     while (!fetched) { 
      line = br.readLine(); 
      if (line.contains("Average Sell Offer")) { 
       Toast.makeText(this, line, Toast.LENGTH_LONG).show(); 
       progBox.dismiss(); 
       fetched = true; 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 
+0

Где вы использовали этот код? – Biu

+0

Извините, в методе onCreate. Ill обновить соответственно. – Brian

+3

это 'while (! Fetched) {' - бесконечный цикл (на самом деле это не потому, что он разбит неизбежным NPE) – njzk2

ответ

1

В комментарии упоминается «проблема», не описывая ее. Вы не можете сделать httpClient.execute в потоке пользовательского интерфейса, где находится onCreate.

android httpclient.execute exception

Причина вы думаете, что код не выполняется, но это, кажется, делает так, что вы catch исключение. Проверьте LogCat, а затем прочитать на AsyncTask

EDIT:

Вы также можете использовать фоновый поток, если вы знакомы с многопоточности и выгода/ловушками. На самом деле я обычно делаю задачи, потому что у AsyncTask есть свои преимущества/ловушки.

+0

Спасибо за подсказку. Можно ли запустить указанный код в потоке (Runnable)? – Brian

+1

Абсолютно! Я изменил свой ответ, чтобы отразить это. – Jim

+0

Выполнение этой проблемы исправлено! Большое спасибо!!! – Brian

Смежные вопросы