2013-09-30 2 views
1

Boilerpipe - это библиотека, которая в основном извлекает основной контент с веб-страницы. Для новостных веб-сайтов особенно сложно извлечь контент, поскольку форматирование отличается от сайта к сайту. Поэтому я попытался интегрировать библиотеку котлов - https://code.google.com/p/boilerpipe/wiki/QuickStartИспользование котла в Android

В соответствии с руководством по установке, я добавил следующее к моему пути Java classpath - pipepipe-VERSION.jar, nekohtml-1.9.13.jar и xerces-2.9. 1.jar

то, что я пытаюсь сделать с boilerpipe и мой поток приложения, который включает в себя это

У меня есть представление списка, где есть список статей. Я создала onItemClickListener таким образом, что при нажатии на любом из пунктов ListView, он принимает URL специфичного для этой статьи и использует boilerpipe для извлечения текста из этой статьи, и начинается Деятельность, где она напечатана в textview.

Проблема

Моего сбой приложение один раз, когда я нажимаю на одном из пунктов в списке. a. Я не уверен, правильно ли написан код, так как я новичок. Пожалуйста, извините меня за это. Если это неверно, как я могу это исправить? У меня такое чувство, что это может быть проблема с URL. b. Если я правильно не установлен шаблонного, что правильный способ сделать это

Список активность:

ListView lv = getListView(); 

    // Launching new screen on Selecting Single ListItem 
    lv.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

      Intent in = new Intent(getApplicationContext(), ArticleActivity.class); 

      // getting page url 
      String page_url = ((TextView) view.findViewById(R.id.page_url)).getText().toString(); 
      Toast.makeText(getApplicationContext(), page_url, Toast.LENGTH_SHORT).show(); 
      URL url = null; 
      try { 
       url = new URL(page_url); 
      } catch (MalformedURLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      // NOTE: Use ArticleExtractor unless DefaultExtractor gives better results for you 
      try { 
       String text = null; 
       text = ArticleExtractor.INSTANCE.getText(url); 
       in.putExtra("text", text); 
      } catch (BoilerpipeProcessingException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      startActivity(in);    
    }); 
} 

Статья активность:

public class ArticleActivity extends Activity{ 

Intent in = getIntent(); 
String text = in.getStringExtra("text"); 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.article_view); 

    TextView tv; 

    tv = (TextView) findViewById(R.id.page_url); 
    tv.setText(text); 
    } 
} 

article_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<!-- Article Title --> 
<TextView android:id="@+id/content_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingTop="10dp" 
    android:paddingBottom="8dp" 
    android:textSize="18sp" 
    android:textStyle="bold" 
    android:textColor="#dc6800"/> 


</RelativeLayout> 

Трассировка стека:

USER_COMMENT=null 
ANDROID_VERSION=4.1.2 
APP_VERSION_NAME=1.0 
BRAND=samsung 
PHONE_MODEL=GT-N8000 
CUSTOM_DATA= 
STACK_TRACE=android.os.NetworkOnMainThreadException 
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118) 
at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
at java.net.InetAddress.getAllByName(InetAddress.java:214) 
at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315) 
at libcore.net.http.HttpEngine.connect(HttpEngine.java:310) 
at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 
at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) 
at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273) 
at libcore.net.http.HttpURLConnectionImpl.getHeaderField(HttpURLConnectionImpl.java:130) 
at java.net.URLConnection.getContentType(URLConnection.java:326) 
at de.l3s.boilerpipe.sax.HTMLFetcher.fetch(HTMLFetcher.java:35) 
at de.l3s.boilerpipe.extractors.ExtractorBase.getText(ExtractorBase.java:87) 
at com.j.infographx.ListRSSItemsActivity$1.onItemClick(ListRSSItemsActivity.java:94) 
at android.widget.AdapterView.performItemClick(AdapterView.java:301) 
at android.widget.AbsListView.performItemClick(AbsListView.java:1287) 
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3078) 
at android.widget.AbsListView$1.run(AbsListView.java:4161) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4921) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
at dalvik.system.NativeStart.main(Native Method) 

ответ

0

Похоже, это не имеет ничего общего с шаблонным, а тем фактом, что вы делаете сетевой вызов на главном потоке. Рекомендую вам зарегистрироваться this thread regarding the problem.

Смежные вопросы