2016-04-15 33 views
-1

我使用的是Windows 7,Android SDK版本2.0。此应用程序有3个编辑视图来输入数据,2个按钮用于保存和显示数据,但应用程序不显示任何内容,我添加了使用读写权限文件在Android中的读取

'package com.example.anshul.writing_to_external; 

import android.os.Environment; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 

public class MainActivity extends AppCompatActivity { 

EditText edit_book,edit_pub,edit_price; 
Button btnsave,btndisplay; 
String state; 
TextView displaytext; 

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

    edit_book=(EditText)findViewById(R.id.edit_book); 
    edit_pub=(EditText)findViewById(R.id.edit_pub); 
    edit_price=(EditText)findViewById(R.id.edit_price); 

    displaytext=(TextView)findViewById(R.id.display_text); 

    btnsave=(Button)findViewById(R.id.btnsave); 
    btndisplay=(Button)findViewById(R.id.btndisplay); 

    btnsave.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      state= Environment.getExternalStorageState(); 
      if(Environment.MEDIA_MOUNTED.equals(state)){ 
       String b_name=edit_book.getText().toString(); 
       String b_pub=edit_pub.getText().toString(); 
       String b_price=edit_price.getText().toString(); 
       String str="Book Name : "+b_name+"Book Publisher : "+b_pub+"Book Price : "+b_price; 
       Toast.makeText(getBaseContext(),"Saved "+str,Toast.LENGTH_LONG).show(); 
       try{ 
        File sdcard = getExternalFilesDir(null); 
        File directory=new File(sdcard.getAbsolutePath()+"/MyFiles/"); 
        directory.mkdirs(); 


        File file=new File(directory,"bookDetails.txt"); 
        Toast.makeText(getBaseContext(),sdcard.canRead()?"Yes Read":"No Read",Toast.LENGTH_LONG).show(); 
        FileOutputStream fout= new FileOutputStream(file); 
        OutputStreamWriter osw = new OutputStreamWriter(fout); 
        osw.write(str); 
        osw.flush(); 
        osw.close(); 
        fout.close(); 

        edit_book.setText(""); 
        edit_pub.setText(""); 
        edit_price.setText(""); 
       } 
       catch (IOException e){ 
        e.printStackTrace(); 
       } 

     } 
      else 
      { 
       Toast.makeText(getBaseContext(),"Memory Card Not Present",Toast.LENGTH_LONG).show(); 
      }} 
    }); 

    btndisplay.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      state= Environment.getExternalStorageState(); 
      if(Environment.MEDIA_MOUNTED.equals(state)){ 
       StringBuilder str = new StringBuilder(); 
       String sL; 

       try{ 
        File sdcard = getExternalFilesDir(null); 
        File directory=new File(sdcard.getAbsolutePath()+"/MyFiles/"); 

        File file=new File(directory,"bookDetails.txt"); 
        Toast.makeText(getBaseContext(),"Saved "+getFilesDir(),Toast.LENGTH_LONG).show(); 
        Toast.makeText(getBaseContext(),sdcard.canWrite()?"Yes write":"No write",Toast.LENGTH_LONG).show(); 
        FileInputStream fout= new FileInputStream(file); 
        InputStreamReader osw = new InputStreamReader(fout); 
        BufferedReader br = new BufferedReader(osw); 

        while ((sL=br.readLine())!=null){ 
         str.append(sL); 
        } 
        br.close(); 
        osw.close(); 
        fout.close(); 

        displaytext.setText(sL); 
       } 
       catch (IOException e){ 
        e.printStackTrace(); 
       } 

      } 
      else 
      { 
       Toast.makeText(getBaseContext(),"Memory Card Not Present",Toast.LENGTH_LONG).show(); 
      } 
     } 
    }); 
    } 
}` 

回答

0

这是因为在保存文件后,您无法立即读取它。

这需要一些时间MediaScanner获得意识到保存在SD卡

文件

。使用本 -

 MediaScannerConnection.scanFile(this, 
       new String[]{file.toString()}, null, 
       new MediaScannerConnection.OnScanCompletedListener() { 
        public void onScanCompleted(String path, Uri uri) { 
         Log.i("ExternalStorage", "Scanned " + path + ":"); 
         Log.i("ExternalStorage", "-> uri=" + uri); 
        } 
       }); 

这里的文件是文件的文件=新的文件(路径,FILE_NAME +“.TXT” );

+0

好吧,这不是问题,所以经过几次更多的搜索后,我才知道我们是否使用API​​ 23+,尽管他已经在清单文件中指定了它,但是它必须授予请求用户权限[http:// developer .android.com/intl/es/training/permissions/requests.html#handle-response) –

+0

您之前没有提及过。 –