所以我有這段使用JSoup的代碼,我認爲它不能正常工作(因爲JSoup的大部分事情需要至少一點修補才能正確)。但是,我一直試圖嘗試,但我的代碼不會在Android Studio中運行。最後,我試着用Eclipse和我的運氣,唉,同樣的代碼塊工作正常!當然,因爲我正在開發應用程序,所以我需要此代碼在Android Studio上運行,但我不知道該如何執行才能運行它!大塊代碼不能在Android Studio中工作,但在Eclipse中完美工作?
這裏是在Eclipse上運行的代碼塊,但沒有工作室:
String link= doc.select("div.searchTemplate.listLayout.so_us_en")
.select("div[id= topDynamicContent]")
.select("div.a-row.a-spacing-base.searchUndoAUIHacks")
.select("div.a-row")
.select("div.a-column.a-span8.a-spacing-none")
.select("div.s-first-column")
.select("h2.a-size-base.a-spacing-small.a-spacing-top-small.a-text-normal").first().text();
System.out.println(link);
int listSize= Integer.parseInt(link.substring(2,4));
System.out.println(listSize);
,這裏是該工作室是給我的錯誤信息:
08-09 23:46:30.939 32525-532/com.velesapp.jsouptutorial W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.jsoup.nodes.Element.text()' on a null object reference
08-09 23:46:30.939 32525-532/com.velesapp.jsouptutorial W/System.err: at com.velesapp.jsouptutorial.MainActivity$getProductAttributes.doInBackground(MainActivity.java:82)
08-09 23:46:30.939 32525-532/com.velesapp.jsouptutorial W/System.err: at com.velesapp.jsouptutorial.MainActivity$getProductAttributes.doInBackground(MainActivity.java:58)
08-09 23:46:30.939 32525-532/com.velesapp.jsouptutorial W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:305)
08-09 23:46:30.939 32525-532/com.velesapp.jsouptutorial W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-09 23:46:30.939 32525-532/com.velesapp.jsouptutorial W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
08-09 23:46:30.939 32525-532/com.velesapp.jsouptutorial W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
08-09 23:46:30.939 32525-532/com.velesapp.jsouptutorial W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
08-09 23:46:30.939 32525-532/com.velesapp.jsouptutorial W/System.err: at java.lang.Thread.run(Thread.java:761)
對於這兩種IDE中的導入完全相同,我通過Android Studio使用AsyncTask運行該進程,但未在Eclipse中使用任何線程。
下面是完整的代碼:
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class MainActivity extends AppCompatActivity {
Button but;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
but = (Button)findViewById(R.id.but1);
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new getProductAttributes("https://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Delectronics&field-keywords=rx+390").execute();
}
});
}
public class getProductAttributes extends AsyncTask<Void,Void,Void>{
String url;
int listSize;
public getProductAttributes(String url){
this.url = url;
}
protected Void doInBackground (Void... voids) {
try{
Document doc = Jsoup.connect(url).get();
String link= doc.select("div.searchTemplate.listLayout.so_us_en")
.select("div[id= topDynamicContent]")
.select("div.a-row.a-spacing-base.searchUndoAUIHacks")
.select("div.a-row")
.select("div.a-column.a-span8.a-spacing-none")
.select("div.s-first-column")
.select("h2.a-size-base.a-spacing-small.a-spacing-top-small.a-text-normal").first().text();
System.out.println(link);
listSize= Integer.parseInt(link.substring(2,4));
System.out.println(listSize);
}catch (Exception e){e.printStackTrace();}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
感謝您的時間!
您可以發佈[MCVE] – shmosel
也許它與AsyncTask而不是IDE有關?你不能在eclipse中設置最新的android項目 –
正如@suraj提到的 - ASyncTask - 你能爲我們提供你使用的完整Android Studio代碼(特別是ASyncTask)嗎? – r3dst0rm