0

これが私の 3 つのアクティビティです。問題は、LineGraph で Xstring の出力として null を取得していることです。デバッグすると、次のようなパターンが表示されます。

parseStrings = mJsoupAct.getOutput(); LineGraph.java
mExecute(); jsoupAct.java
new Parsee().execute(); jsoupAct.java
Log.d("xoutputD", 出力 + ""); jsoupAct.java
url = " http://www.google.co.in/ "; jsoupAct.java ...........

問題は.. なぜ 4 行目が 5 行目よりも前に実行されるのかということです。この実行により、null を返し、doInBackgroundを実行します。なぜこれが起こっているのですか?

主な活動

public class MainActivity extends Activity {
jsoupAct mJsoupAct = new jsoupAct();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d("xmain", "main");

    Intent i = new Intent(getApplicationContext(), LineGraph.class);
    startActivity(i);
}
}

折れ線グラフ

public class LineGraph extends Activity {
String parseStrings;
jsoupAct mJsoupAct;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mJsoupAct = new jsoupAct();
    Xparse();
}
public void Xparse() {
    parseStrings = mJsoupAct.getOutput();
    Log.d("xstring", parseStrings + "");
}
}

jsoupAct

public class jsoupAct extends Activity {
public String output;
public String url;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

public void mExecute() {
    new Parsee().execute();

}

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

    protected String doInBackground(String... params) {
        try {
            url = "http://www.google.co.in/";
            Document doc = Jsoup.connect(url).get();
            String body = doc.body().text();
            output = body.toString();
            Log.d("xoutputD0", output + "");
        } catch (IOException e) {

            e.printStackTrace();
        }
        return output;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(output);
        Log.d("xoutputD1", output + "");
    }
}

public String getOutput() {
    mExecute();
    Log.d("xoutputD", output + "");
    return output;
}

public void setOutput(String output) {
    this.output = output;
}
}
4

2 に答える 2

2

私は道を見つけました。実際、Jsoup は並行してスレッドではるかに多くの時間を費やしているため、メイン スレッドはそれを待機せずに実行を続けているため、出力として null が返されます。これを克服するために、JsoutAct.javaと whohoooppp のメイン スレッドにスリープを追加しました。

public String getOutput() {
        mExecute();
        Log.d("xoutputD2", output + "");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return output;
    }
于 2013-11-15T12:08:26.900 に答える