构造ArrayAdaptor时的Resources.NotFoundException

时间:2015-09-01 07:52:30

标签: java android

这是我的.java文件:

package com.example.rohitkulkarni.readingfile;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

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

       ListView listView= (ListView) findViewById(R.id.listView);
        try{

                InputStream inputreader = getAssets().open("myaddress.txt");
                BufferedReader buffreader = new BufferedReader(new InputStreamReader(inputreader));



                ArrayList<String> lines = new ArrayList<String>();
           boolean hasNextLine =true;
            while (hasNextLine){

               String line =  buffreader.readLine();
                lines.add(line);
               hasNextLine = line != null;


            }
                    tv.setText((CharSequence) lines);

            //exception here:
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),R.id.listView,lines);

         listView.setAdapter(adapter);

           inputreader.close();

        }
        catch(FileNotFoundException e){

        }catch(IOException e){

        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

这是我的xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />
</RelativeLayout>

我正在使用getAsset工作正常,但只有ArrayAdaptor不工作我尝试了所有可能的组合,但它无法正常工作。它使用简单的字符串数组。

4 个答案:

答案 0 :(得分:1)

String line = buffreader.readLine();

//我发现他正在取值,所以检查它

  

if(line!= null);

            lines.add(line);
           hasNextLine = line != null;

//不是它工作正常,谢谢

答案 1 :(得分:0)

中间论点是错误的,来自here

  

包含在实例化视图时使用的TextView的布局文件的资源ID。

但是你传递了一个id:

new ArrayAdapter<String>(getApplicationContext(), R.id.listView, lines);

这应该是一个布局:

new ArrayAdapter<String>(getApplicationContext(), R.layout.???, lines);

答案 2 :(得分:0)

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),R.id.listView,lines);

在此行中,您传递了ListView ID。

但构造函数期望布局膨胀。所以传递布局。

喜欢这个

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,lines);

修改

也在这一行。

tv.setText((CharSequence) lines);

您的活动中未定义

tv。如果是TextView,则要为其设置ArrayList。试试tv.setText(lines.toString())

答案 3 :(得分:0)

尝试使用..

adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1 , lines);