2017-09-13 4 views
-2

저는 NewsApp을 만들고 ArrayAdapter를 사용하여 rss 링크에서 TextView로 제목과 날짜를 표시합니다. 그러나 그것을 실행할 때, TextView (s)는 인터넷에서 가져온 문자열 목록을 표시하지 않지만 문자열 목록은 생성자의 주소처럼 보입니다. 이처럼 :Textview가 문자열을 보지 못합니다.

[email protected]

[email protected]

등등 ...

도와주세요. (sonyhater 내 사용자 이름이고 제는 생성자의 이름)이 내 MainActivity

입니다 :

package com.example.sonyhater.test; 

import android.os.AsyncTask; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 

ListView listView; 
ArrayAdapter mAdapter; 

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

    listView = (ListView) findViewById(R.id.list); 

    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      new Readdata().execute("https://vnexpress.net/rss/the-gioi.rss"); 
     } 
    }); 
} 
class Readdata extends AsyncTask<String, Integer, String>{ 

    @Override 
    protected String doInBackground(String... params) { 
     return readFromURL(params[0]); 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     List<Article> articles = new ArrayList<Article>(); 

     XMLDOMParser parser = new XMLDOMParser(); 
     Document document = parser.getDocument(s); 
     NodeList nodeList = document.getElementsByTagName("item"); 
     String title = ""; 
     String date =""; 
     for (int i = 0; i < nodeList.getLength(); i++){ 
      Element element = (Element) nodeList.item(i); 
      title = parser.getValue(element,"title"); 
      Toast.makeText(MainActivity.this, title, Toast.LENGTH_LONG).show(); 
      date = parser.getValue(element,"pubDate"); 

      articles.add(new Article(title, date)); 
     } 
     mAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, articles); 
     listView.setAdapter(mAdapter); 
     super.onPostExecute(s); 
    } 
} 

private String readFromURL(String theUrl){ 
    StringBuilder content = new StringBuilder(); 
    try { 
     // create a url object 
     URL url = new URL(theUrl); 

     // create a urlconnection object 
     URLConnection urlConnection = url.openConnection(); 

     // wrap the urlconnection in a bufferedreader 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 

     String line; 

     // read from the urlconnection via the bufferedreader 
     while ((line = bufferedReader.readLine()) != null){ 
      content.append(line + "\n"); 
     } 
     bufferedReader.close(); 
    } 
    catch(Exception e) { 
     e.printStackTrace(); 
    } 
    return content.toString(); 
} 

} 

getValue (요소, "title")에서 Toast를 사용했으며 앱을 실행할 때 올바른 제목을 표시합니다. 어쩌면 어댑터 또는 XML (들)에 문제가 있습니까?

public class ArticleAdapter extends ArrayAdapter<Article> { 
private static final String LOG_TAG = ArticleAdapter.class.getSimpleName(); 
public ArticleAdapter(@NonNull Context context, int source, @NonNull List<Article> objects) { 
    super(context, source , objects); 
} 

@NonNull 
@Override 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    View view = convertView; 
    if (view == null){ 
     view = LayoutInflater.from(getContext()).inflate(R.layout.list_item, null); 
    } 
    Article current = getItem(position); 

    TextView titleTV = (TextView) view.findViewById(R.id.the_title); 
    titleTV.setText(current.getTitle()); 

    TextView dateTV = (TextView) view.findViewById(R.id.date); 
    dateTV.setText(current.getDate()); 

    return view; 
} 
} 

생성자 :

public class Article { 
public String title; 
public String date; 

public Article(String title, String date) { 
    this.title = title; 
    this.date = date; 
} 

public String getTitle(){ 
    return title; 
} 
public String getDate(){ 
    return date; 
} 
} 

main_activity.xml :

<?xml version="1.0" encoding="utf-8"?> 
<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.sonyhater.test.MainActivity" 
android:id="@+id/list"> 

</ListView> 

및 list_item.xml :

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

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="tieu de" 
    android:id="@+id/the_title" 
    android:textColor="@android:color/black" 
    /> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="ngay thang" 
    android:id="@+id/date" 
    android:textColor="@android:color/black"/> 

</LinearLayout> 

내 어댑터입니다

고마워요!

+0

쇼처럼 ArticleAdapter 클래스의 생성자에 넣어 ArrayList를 초기화'getItem' 방법 – phpdroid

답변

0

List<Article> mArticle; 

this.mArticle=objects; 

사용이

titleTV.setText(mArticle.get(position).getTitle()); 

dateTV.setText(mArticle.get(position).getDate()); 
관련 문제