2016-03-28 63 views
-3

我是一个新手程序员,可能会领先于我自己,但我迄今为止编写的代码似乎不起作用,我一直试图弄清楚它几小时无法让TextView显示来自txt文件的文本

问题是,当我运行这个应用程序时,TextView仍然显示为空。

public class MainActivity extends Activity 
{ 
// GUI controls 
TextView thoughtLogView; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    //Set MainActivity.xml as user interface layout 
    setContentView(R.layout.main); 
    // bind GUI elements with local controls 

    thoughtLogView = (TextView) findViewById(R.id.logTextView); 
} 

private String GetPhoneAddress() { 
    File file = new File(Environment.getExternalStorageDirectory() + "mythoughtlog.txt"); 
    if (!file.exists()){ 
     String line = "Need to add smth"; 
     return line; 
    } 
    String line = null; 
    //Read text from file 
    //StringBuilder text = new StringBuilder(); 
    try { 
     BufferedReader br = new BufferedReader(new FileReader(file)); 
     line = br.readLine(); 
    } 
    catch (IOException e) { 
     //You'll need to add proper error handling here 
    } 

    final TextView tvphone = (TextView) findViewById(R.id.logTextView); 
    String saved_phone = GetPhoneAddress(); 
    if (saved_phone.length()>0){ 
     tvphone.setText(saved_phone); 
    } 
    return line; 
} 

而这里的布局文件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="top|center" 
android:orientation="vertical"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/title" 
    android:textStyle="normal" 
    android:gravity="center" 
    android:layout_marginTop="10dp" 
    android:textSize="20sp" 
    android:textColor="#FFFFFF"/> 

<TextView 
    android:layout_width="242dp" 
    android:layout_height="227dp" 
    android:id="@+id/logTextView" 
    android:background="#ffffff" /> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="bottom|center"> 

    <Button 
     android:layout_height="80dp" 
     android:text="New Log" 
     android:layout_width="match_parent" 
     android:layout_weight="1.0" 
     android:textSize="25sp" 
     android:onClick="onNewLogButtonClick"/> 

</LinearLayout> 

+2

你没有调用'GetPhoneAddress()'方法。 –

+1

在您的onCreate中调用** GetPhoneAddress()**方法 –

回答

1

你不叫GetPhoneAddress()那的原因,你不能设置文本。所以用这种方式改变你的代码。

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    //Set MainActivity.xml as user interface layout 
    setContentView(R.layout.main); 
    // bind GUI elements with local controls 

    thoughtLogView = (TextView) findViewById(R.id.logTextView); 
    GetPhoneAddress(); 
} 
0

只有在执行完整的方法后,才会从方法GetPhoneAddress()获得字符串结果。

问题是,当我运行这个应用程序时,TextView仍然显示为空。

这是因为你在saved_phone没有价值,你是不是叫GetPhoneAddress()要么,所以我建议你移动代码的这些线路的方法GetPhoneAddress()外,正确地调用它,将其设置为TextView前检查字符串。

String saved_phone = GetPhoneAddress(); 
    if (saved_phone.length()>0){ 
     tvphone.setText(saved_phone); 
    } 
0

移动这条线到

onCreate(Bundle savedInstanceState){ 
GetPhoneAddress(); 
final TextView tvphone = (TextView) findViewById(R.id.logTextView); 
String saved_phone = GetPhoneAddress(); 
if (saved_phone.length()>0){ 
    tvphone.setText(saved_phone); 
} 

} 

问题是什么,你正在试图return语句之前,从方法本身GetPhoneAddress()得到返回的字符串,所以它会返回任何结果,你需要后置文本调用GetPhoneAddress()并且你可以达到上述效果