我是Android的新手,并尝试从书中做一个excersize,但我一直收到一个错误,说不允许使用makeText,但就我在本书中所看到的那样。 有没有人知道这里有什么问题?
package com.madebyjohann.contentproviders;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
import android.provider.ContactsContract;
import android.database.Cursor;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button queryButton = (Button)findViewById(R.id.button1);
queryButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
queryContact ();
}
private void queryContact() {
// TODO Auto-generated method stub
Cursor nameCursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (nameCursor.moveToNext()) {
String contactName =
nameCursor.getString(nameCursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY));
Toast.makeText(this, contactName, Toast.LENGTH_SHORT).show();
}
nameCursor.close();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
答案 0 :(得分:1)
是的,这正是你应该做的。在你的Toast系列中:
Toast.makeText(this, contactName, Toast.LENGTH_SHORT).show();
“this”指的是最内层的类,即您正在构建的OnClickListener。
每当你有“new Something()”时,这意味着你要实例化一个类。总是,在类中使用“this”将引用该实例 - 最内层的类。
OnClickListener()类不是Context,这就是makeText()失败的原因。第一个参数需要是一个Context,并且由于Activity类扩展了一个Context(public class MainActivity extends Activity
),你可以在这里添加MainActivity.this
,它将是有效的。
答案 1 :(得分:0)
我改变了以下内容,似乎有效,但不确定这是否应该是我应该做的?
Toast.makeText(MainActivity.this, contactName, Toast.LENGTH_SHORT).show();
答案 2 :(得分:0)
MakeText仅构建对象。您需要在生成的对象上调用show。