2013-08-15 3 views
0

Я пытаюсь сохранить тело этой ссылки в String HTML, а затем загрузить его в WebView. (Анализ кода выполняется с помощью Jsoup). Когда я нажимаю кнопку, отладчик показывает мне String HTML = re.fixCode(); и говорит «Отладка текущего указателя инструкций».Невозможно получить доступ к методам/переменным в разных классах

Я пробовал много вещей, например, передавая строку в методе и передавая ей строку. Но то же самое происходит снова и снова. Мое заключение заключается в том, что он не передает метод/переменные моим другим классам? (Надеюсь, вы понимаете, что последний бит)

И если это так, как я могу получить к ним доступ? Через намерения?

Чтобы быть ясным, я хочу получить тело, передать его на строку и загрузить ее в WebView. Благодаря!

Основной класс

public class MainActivity extends Activity { 

    private String uri = "http://www.novasoftware.se/webviewer/%28S%28muz0tu55twfd43zkqrlejb55%29%29/design1.aspx?schoolid=18200&code=83310"; 
    private RequestTask re; 

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

     Button b = (Button) findViewById(R.id.button1); 
     final WebView web = (WebView) findViewById(R.id.webView1); 
     WebSettings webSettings = web.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 



     b.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       new RequestTask().execute(uri); 
       loadWeb(); 
      } 
     }); 

    } 

    private void loadWeb() { 
     **String HTML = re.fixCode();** 
     System.out.println(HTML); 
     //  web.loadData(re.fixedHtml, "text/html", null); 
    } 
} 

RequestTask класс

package com.dir.schema; 

import java.io.ByteArrayOutputStream; 
import java.io.IOException; 

import org.apache.http.HttpResponse; 
import org.apache.http.HttpStatus; 
import org.apache.http.StatusLine; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 

import android.os.AsyncTask; 

public class RequestTask extends AsyncTask<String, String, String>{ 

    public String html, fixedHtml; 

    @Override 
    protected String doInBackground(String... uri) { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpResponse response; 
     String responseString = null; 
     try { 
      response = httpclient.execute(new HttpGet(uri[0])); 
      StatusLine statusLine = response.getStatusLine(); 
      if(statusLine.getStatusCode() == HttpStatus.SC_OK){ 
       ByteArrayOutputStream out = new ByteArrayOutputStream(); 
       response.getEntity().writeTo(out); 
       out.close(); 
       responseString = out.toString(); 
      } else{ 
       //Closes the connection. 
       response.getEntity().getContent().close(); 
       throw new IOException(statusLine.getReasonPhrase()); 
      } 
     } catch (ClientProtocolException e) { 
      //TODO Handle problems.. 
     } catch (IOException e) { 
      //TODO Handle problems.. 
     } 
     return responseString; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     //Do anything with response.. 
     html = result; 
     fixCode(); 
    } 

    public String fixCode() { 
     Document doc = Jsoup.parse(html); 
     return fixedHtml = doc.body().toString(); 

    } 

    } 
+0

Вы получаете реальную ошибку? Если так, то, что это? Если это NPE, это 'doc' или' doc.body() '' null'? Если нет, вы уверены, что не просто случайно поставили там точку останова? –

+0

@JasonC Это не так, и у NPE doc и doc.body() есть значение, я проверил. , когда я запускаю его, он говорит: «Этот вид запуска - это конфигурация, чтобы открыть перспективу Dubug при подвешенном состоянии» – Donald

ответ

0

Вы звоните re.fixCode(), но повторно не был установлен ни к чему. Я ожидаю, что вы получите ошибку с нулевым указателем на данный момент.

Я думаю, что вы хотите переписать ваш OnClick() метод следующим образом:

public void onClick(View v) { 
    re = new RequestTask(); 
    re.execute(uri); 
    loadWeb(); 
} 
+0

Примечание: Я собираюсь предположить, что у вас есть ваши потенциальные условия гонки под контролем? Я думаю, вероятно, что ** loadWeb() ** будет вызван до того, как ваш ** RequestTask ** завершит выполнение. Будет ли это проблемой? –

+0

да это может быть проблема. Как мне его решить? Выполняя Thread, а затем sleep (1000) и заканчивая RequestTask? – Donald

+0

Вызов loadWeb() из onPostExecute(), вероятно, сделает трюк. Сон никогда не является хорошей идеей при попытке избежать условий гонки, особенно в Интернете. –