html解析器android隐藏输入字段

时间:2014-04-20 09:00:33

标签: android html parsing android-asynctask

我需要一些帮助'因为我每次尝试解决问题时都会遇到错误。我是android编程的新手。我想从html网站的某个字段中提取一个值。此字段位于表单中并隐藏。 html就在这里。

<form autocomplete="off" id="Form1" action="login.aspx" method="post" name="Form1">
 <input type="hidden" value="" name="__EVENTTARGET">
 <input type="hidden" value="" name="__EVENTARGUMENT">
 <input type="hidden" value="dDwtMTg3MDkxXN199v0w==" name="__VIEWSTATE">

我试着写一些代码,但目前我的asynctask有错误。在使用asynctask之前,应用程序一直在崩溃,我发现故障可能是服务器需要一些时间来响应,这会导致一些问题。我的代码如下。

目的是使用post方法将该值与用户名和密码一起发送到站点,然后检查它是否使用post方法发送和发送一些其他值。

请帮帮我!感谢你的时间!

 package com.example.parser;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

    TextView textView1;

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

        new Connection().execute();

        //TextView myText = (TextView) findViewById(R.id.textView1);
        //myText.setText("value =" + value);

        textView1 = (TextView) findViewById(R.id.textView1);

        // try {
        // parsing();
        // } catch (IOException e) {
        // // TODO Auto-generated catch block
        // e.printStackTrace();
        // }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public static void parsing(TextView textView1) throws IOException {
        Document doc = Jsoup.connect(
                "i have hidden my url :p ").get();
        Elements value = doc.select("[name=__VIEWSTATE]");
        textView1.setText("my value is" + value);
    }


    private class Connection extends AsyncTask {
        @Override
        protected Object doInBackground(Object... arg0) {
            try {
                parsing(textView1);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
    }

}

1 个答案:

答案 0 :(得分:0)

从后台线程调用

textView1.setText("my value is" + value)。您必须从UI线程调用它。 无论如何,必须在doInBackgroud()方法内完成与网络相关的内容,并且应在textview.setText()方法中调用与onPostExecute相关的UI相关内容。

private class Connection extends AsyncTask<Void, Void , Elements> {

    @Override
    protected Elements doInBackground(Void... params) {
        Elements value = parsing(textView1);
        return value;
    }

    @Override
    protected void onPostExecute(Elements value) {
        super.onPostExecute(s);
        textView1.setText("my value is" + value);
    }
}