我需要一些帮助'因为我每次尝试解决问题时都会遇到错误。我是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;
}
}
}
答案 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);
}
}