1

在我的應用程序中的此活動中,它將調用geApplication().fileList()列出應用程序文件中的所有文件。getApplicationContext()時的Java活動名稱fileList()

在我Elephone P8000手機,我管理沒有任何錯誤,以創建新的文件,但是當我嘗試了我的三星手機上,這個問題會彈出

enter image description here

這些文件與「rList- asia.sumikawa「是我沒有創建的文件。

事實上,根據文件末尾的名字「MainActivity」判斷,這些都是我的活動名稱。

我該如何解決這個問題?

編輯

我滿十歲上下的Java代碼

public class addressActivity extends Activity { 

ListView listView; 

String[] SavedFiles; 

/** 
* Called when the activity is first created. 
*/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_address); 

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

    addData(); 
    editData(); 
    ShowSavedFiles(); 
    editContent(); 
    setMultiDelete(); 
    listView.setOnItemClickListener(getURLOnItemClickListener); 
} 

void ShowSavedFiles() { 
    //SavedFiles = getApplicationContext().fileList(); 
    //SavedFiles = getApplication().fileList(); 
    SavedFiles = addressActivity.this.fileList(); 
    ArrayAdapter<String> adapter 
      = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, 
      SavedFiles); 

    listView.setAdapter(adapter); 
    if (adapter.isEmpty()) { 
     Toast.makeText(getBaseContext(), "There is no Address !", Toast.LENGTH_LONG).show(); 
    } 
} 

OnItemClickListener getURLOnItemClickListener 
     = new OnItemClickListener(){ 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
          long id) { 
     // TODO Auto-generated method stub 
     String clickedFile = (String) parent.getItemAtPosition(position); 
     getURL(clickedFile); 
    } 

}; 

void getURL(final String file){ 
    if (clickAble == true){ 
     FileInputStream fis; 
     String content = ""; 
     try { 
      fis = openFileInput(file); 
      byte[] input = new byte[fis.available()]; 
      while (fis.read(input) != -1) {} 
      content += new String(input); 
      //Toast.makeText(getBaseContext(),content,Toast.LENGTH_SHORT).show(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     Intent i = new Intent(addressActivity.this, liveActivity.class); 
     String strName = content.toString(); 
     i.putExtra("urlAddress", strName); 
     startActivity(i); 
    } 
} 

OnItemClickListener getFileEditContent = new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     String clickedFile = (String)parent.getItemAtPosition(position); 
     setMultiEdit(clickedFile); 
     // change the checkbox state 
     CheckedTextView checkedTextView = ((CheckedTextView) view); 
     if (checkedTextView.isChecked()) { 

      ((CheckedTextView)view).setChecked(true); 
      checkedTextView.setChecked(!checkedTextView.isChecked()); 
      utils.myPosInt.clear(); 
      utils.myPos.clear(); 
      utils.myPosTitle.clear(); 

     } else { 
      for(int i=0; i<listView.getChildCount();i++) 
      { 
       view = listView.getChildAt(i); 
       ((CheckedTextView)view).setChecked(false); 
      } 

      checkedTextView.setChecked(!checkedTextView.isChecked()); 
      utils.myPosTitle.add(clickedFile); 
     } 

    } 
}; 
+0

嘗試清理你的項目.'Build - > clean'。 – skydroid

+1

@skydroid我試過之前,它仍然無法正常工作。我甚至嘗試用'getApplication()'替換'getApplicationContext()'以查看任何區別,但無濟於事 –

回答

0

這裏是我的代碼

的test.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ListView 
     android:id="@+id/test_list" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

</LinearLayout> 

特st.java

public class Test extends AppCompatActivity 
{ 
    @Bind(R.id.test_list) 
    ListView listView; 
    String[] SavedFiles; 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.test); 
     ButterKnife.bind(this); 

     ShowSavedFiles(); 
    } 
    void ShowSavedFiles() 
    { 
     SavedFiles = getApplicationContext().fileList(); 
     ArrayAdapter<String> adapter 
       = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, 
       SavedFiles); 

     listView.setAdapter(adapter); 
     if (adapter.isEmpty()) { 
      Toast.makeText(getBaseContext(), "There is no Address !", Toast.LENGTH_LONG).show(); 
     } 
    } 

} 

輸出

output

從文檔

fileList()

fileList():返回一個字符串數組,命名與此Context的應用程序包關聯的私有文件 。

備用

String[] iFileList = YourActivityName.this.fileList(); 

希望這有助於..

UPDATE

試試這個替代的解決方案

String dataDr=getApplicationInfo().dataDir; 
    Log.i(TAG,"data dir"+dataDr); 

    showDirFile(dataDr); 


    void showDirFile(String dirpth) 
    { 
     String path = dirpth+"/files"; 
     Log.d("Files", "Path: " + path); 
     File f = new File(path); 
     File file[] = f.listFiles(); 
     Log.d("Files", "Size: "+ file.length); 

     SavedFiles=new String[file.length]; 
     for (int i=0; i < file.length; i++) 
     { 
      Log.d("Files", "FileName:" + file[i].getName()); 

      SavedFiles[i]=file[i].getName(); 
     } 

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

     listView.setAdapter(adapter); 


    } 
+1

除了'ButterKnife.bind(this);'外,您的代碼實際上與我的代碼相同。那是什麼? –

+0

它並不重要,它只是依賴注入[ButterKnife](https:// github。com/JakeWharton/butterknife) – skydroid

+1

感謝您的幫助,但是如果我在適配器上使用'dataDr'將其顯示在列表視圖上,則使用代碼會崩潰,或者當我在onCreate上調用該方法時,listview將不顯示任何內容。我編輯我的代碼,以防萬一 –

相關問題