【问题标题】:Can't access a class object from a function says unknown class无法从函数访问类对象说未知类
【发布时间】:2017-12-15 15:48:38
【问题描述】:

试图从存储在类数组中的列表视图中获取所有选定的值。当我尝试从该类中获取并尝试在函数中创建对象时,我无法使用它。这是代码

public void showResult(View view) {
        String result = "Selected Product are :";
        int totalAmount=0;
        ArrayList<contactStruct> product = new ArrayList<contactStruct>();

        for (product p : boxAdapter.getBox()) {
            if (p.box){
                result += "\n" + p.name;
                totalAmount+=p.price;
            }
        }
        Toast.makeText(this, result+"\n"+"Total Amount:="+totalAmount, Toast.LENGTH_LONG).show();
    } 

它在 onCreate 中。它说未知类产品。请帮忙。 是的,它在同一个包装上。这里是课堂

public class contactStruct {
    String name;
    String mob;
    int image;
    boolean box;


    contactStruct(String _describe, String _mob, int _image, boolean _box) {
        name = _describe;
        mob = _mob;
        image = _image;
        box = _box;
    }
}

这是我的完整代码

import android.database.Cursor;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

public class LoadContacts extends AppCompatActivity {

    ArrayList<contactStruct> products = new ArrayList<contactStruct>();
    Cursor cursor ;
    String name, phoneNumber;
    int imgP;
    ListAdapter boxAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_load_contacts);
        fillData();
        boxAdapter = new com.example.piku.SteaUd.ListAdapter(this, products);
        ListView lvMain = (ListView) findViewById(R.id.lview);
        lvMain.setAdapter(boxAdapter);
        Button submit = (Button)findViewById(R.id.selectCon);
        submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showResult(v);
            }
        });
    }

    void fillData() {
        cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null, null, null);
        while (cursor.moveToNext()) {
            name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

            phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            imgP =cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI));
            products.add(new contactStruct(""+name,phoneNumber,imgP,false));

        }
        cursor.close();


    }

    public void showResult(View view) {
        String result = "Selected Product are :";
        int totalAmount=0;
        ArrayList<contactStruct> prod = new ArrayList<contactStruct>();

        for (prod p : boxAdapter.getBox()) {
            if (p.box){
                result += "\n" + p.name;
                totalAmount+=p.price;
            }
        }
        Toast.makeText(this, result+"\n"+"Total Amount:="+totalAmount, Toast.LENGTH_LONG).show();
    }
}

【问题讨论】:

  • 你的类是在哪里定义的?已经尝试过 ALT+ENTER ?
  • ALT+ENTER 不可用
  • 请尝试清理项目并重建它

标签: android class listview


【解决方案1】:

您是否尝试将不为人知的课程设为公开?我建议您发布您的课程 contactStruct。也许不在同一个包中,看起来在编译时无法识别,但这只是一个假设,如果不起作用请发布整个错误消息

编辑:好的,所以你需要知道的是指定对象 p。

可能是:

for (ListAdapter p : boxAdapter.getBox()) {

应该这样工作,循环不能这样工作,你不能将prodproduct 传递给p。

以后请学习官方java文档教你如何使用这个feature

【讨论】:

  • OK @DebasisMandal 请看我上面的编辑,现在应该可以解决这个错误了。
【解决方案2】:

错误似乎在您拥有的showResult

(prod p : boxAdapter.getBox())

在for循环中prod应该是对象p(类)的类型,而prod似乎是arraylist对象,但IDE应该在那里给你一个错误,事实上Android Studio告诉我(写同样的事情)Unknown class prod

另外确保 boxAdapter 是可迭代的

        com.example.piku.SteaUd.ListAdapter(this, products);

应该实现Iterable。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2021-04-18
    • 1970-01-01
    相关资源
    最近更新 更多