Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android java如何在嵌套类中重写ParseUser的toString_Java_Android_Parse Platform_Overriding_Extends - Fatal编程技术网

android java如何在嵌套类中重写ParseUser的toString

android java如何在嵌套类中重写ParseUser的toString,java,android,parse-platform,overriding,extends,Java,Android,Parse Platform,Overriding,Extends,在Android中,我试图使用 import android.os.Bundle; import android.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Lis

在Android中,我试图使用

import android.os.Bundle;
import android.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseQuery;
import com.parse.ParseUser;

import java.util.List;


/**
 * A simple {@link Fragment} subclass.
 */
public class ExampleFragment extends Fragment {
    public ExampleFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        final View rootView = inflater.inflate(R.layout.fragment_example, container, false);

        final ListView listView = (ListView) rootView.findViewById(R.id.exampleListView);

        ParseQuery query = User.getQuery();

        query.findInBackground(new FindCallback<User>() {
            public void done(List<User> objects, ParseException e) {
                if (e == null) {
                    // The query was successful.
                    listView.setAdapter(new ArrayAdapter<User>(rootView.getContext(), android.R.layout.simple_list_item_1, objects));

                    for (User user : objects) {

                        Log.i("AppInfo", "Added " + user.toString());
                    }

                } else {
                    // Something went wrong.
                }
            }
        });
        return rootView;
    }

    public class User extends ParseUser {
        @Override
        public String toString() {
            Log.i("AppInfo", "Username: " + getUsername());
            return getUsername();
        }
    }
}
导入android.os.Bundle;
导入android.app.Fragment;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入com.parse.FindCallback;
导入com.parse.ParseException;
导入com.parse.ParseQuery;
导入com.parse.ParseUser;
导入java.util.List;
/**
*一个简单的{@link Fragment}子类。
*/
公共类ExampleFragment扩展了片段{
公共示例片段(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
最终视图根视图=充气机。充气(R.layout.fragment_示例,容器,false);
最终ListView ListView=(ListView)rootView.findViewById(R.id.exampleListView);
ParseQuery=User.getQuery();
findInBackground(新的FindCallback(){
公共void done(列出对象,parsee异常){
如果(e==null){
//查询成功。
setAdapter(新的ArrayAdapter(rootView.getContext(),android.R.layout.simple_list_item_1,objects));
用于(用户:对象){
Log.i(“AppInfo”,“Added”+user.toString());
}
}否则{
//出了点问题。
}
}
});
返回rootView;
}
公共类用户扩展ParseUser{
@凌驾
公共字符串toString(){
Log.i(“AppInfo”,“Username:+getUsername());
返回getUsername();
}
}
}
看起来很简单。我把它嵌套在我的fragment类中,它因此崩溃了

java.lang.ClassCastException:com.parse.ParseUser不能强制转换为com.mycompany.myproject.ExampleFragment$User

但是当我将它移动到它自己的子类中(在android studio的explorer视图中,它有自己的条目)时,它工作得非常好

它嵌套在我的片段类中不起作用有什么原因吗?仅仅为了重写一个函数而创建自己的子类似乎有点不必要


更新:如果删除for循环部分,它不会出错,但在listview返回com.parse时,它仍然不会调用重写的toString()。ParseUser@etcetcetc.

确保你已经做了这两件事

1.在Parse.initialize之前注册类

ParseObject.registerSubclass(User.class);
2.使用注释指定映射到waht类的类

@ParseClassName("_User")
public class User extends ParseUser {
    ...
}
这是参考资料。

MyFragment.User可以强制转换为ParseUser,但相反的不能。每个用户都始终是一个用户。。。但并非所有ParseUser都是用户。。。这就是演员失败的原因。。。也许,在您的片段中,您将变量定义为“ParseUser”。但是,您应该将其用作“User”…请共享定义User/ParseUser objectPost相关类的代码行。将代码张贴到实际出现错误的地方。我肯定你弄错了,不应该是这样的谢谢。已更新完整的代码示例。基本上,我所做的就是在CreateView中将ParseUser替换为User,并添加了类位以覆盖toString()。我怀疑它可能是嵌套类和嵌套在片段类中的组合。也许跟生命周期或是银行有关。我刚刚使用ParseUser.registerSubclass(ExampleFragment.User.class)尝试了这一点;因为我的名字在另一部分。我现在收到一个错误:java.lang.RuntimeException:无法创建应用程序com.android.tools.fd.runtime.bootstrap应用程序:java.lang.IllegalArgumentException:无法注册未实现默认构造函数的类型!是否添加了此注释@ParseClassName(“_User”)您好,是的,我添加了@ParseClassName(_User”),但问题仍然相同。请尝试将您的用户类移动到User.java避免嵌套类。在用@ParseClassName注释的类中,您必须添加一个没有参数含义的默认构造函数:public User(){}