Android练习中的makeText错误

时间:2013-09-22 20:31:54

标签: android

我是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;
    }

}

3 个答案:

答案 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。