Textview不查看String

时间:2017-09-13 09:11:43

标签: android textview

我正在构建一个NewsApp并使用ArrayAdapter来显示从rss链接到TextView的标题和日期。但是当我运行它时,TextView(s)不会显示我想从Internet获得的字符串列表,但字符串列表看起来像构造函数的地址。像这样:

com.example.sonyhater.test.Article@53699f88

com.example.sonyhater.test.Article@53622a78

依旧......

请帮助。(sonyhater是我的用户名,Article是构造函数的名称)

这是我的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(元素,“标题”)下使用了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>

非常感谢你们!

1 个答案:

答案 0 :(得分:0)

初始化Arraylist

List<Article> mArticle;

将它放在ArticleAdapter类的构造函数

this.mArticle=objects;

像这样使用

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

 dateTV.setText(mArticle.get(position).getDate());