我有一个android应用程序,当我单击按钮时,我想从网站上搜索内容,然后我想在该应用程序上获取结果,但是我很困惑,我也不知道该怎么做。 例如,当我单击搜索按钮(pic1)时,我想在后台搜索一些字符串(pic2),并将结果带回应用程序(pic3-红色方块)。
我唯一要做的就是从网站(https://world.openfoodfacts.org/)带文本。
package com.example.owner.foodal11_2.activity;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.provider.DocumentsContract;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.owner.foodal11_2.R;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
/**
* Created by Owner on 17/7/2018.
*/
public class GetDataFromWebsite extends AppCompatActivity {
TextView text;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text=(TextView) findViewById(R.id.resultText);
Button but= (Button)findViewById(R.id.getRes);
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new doit().execute();
}
});
}
public class doit extends AsyncTask<Void,Void,Void>{
String words;
@Override
protected Void doInBackground(Void... voids) {
try {
Document doc= Jsoup.connect("https://world.openfoodfacts.org/").get();
words=doc.text();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
text.setText(words);
}
}
}
答案 0 :(得分:0)
您可以使用Jsoup提交想要在网站中搜索的字符串,例如:
Connection.Response res = Jsoup.connect("http://www.example.com/login.php")
.data("username", "myUsername", "password", "myPassword")
.method(Method.POST)
.execute();
文档doc = res.parse(); 然后从中解析所需的数据。
答案 1 :(得分:0)
使用world.openfoodfacts.org
JSON API
而不是解析html
内容:
public class FetchAllergensTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... strings) {
final String barcode = strings[0];
@Nullable
String allergens = null;
try {
final String jsonStr = Jsoup.connect(
"https://world.openfoodfacts.org/api/v0/product/" + barcode + ".json")
.ignoreContentType(true)
.execute()
.body();
final JSONObject jsonObj = new JSONObject(jsonStr);
if (jsonObj.has("product")) {
JSONObject productNode = jsonObj.getJSONObject("product");
allergens = productNode.getString("allergens");
}
} catch (IOException | JSONException e) {
e.printStackTrace();
}
return allergens;
}
@Override
protected void onPostExecute(@Nullable String result) {
super.onPostExecute(result);
// setText(result);
}
}
...
new FetchAllergensTask().execute("5200334220012");