【问题标题】:Load Parse data into a fragment list view将 Parse 数据加载到片段列表视图中
【发布时间】:2015-10-31 15:22:15
【问题描述】:

我正在使用 android studio 构建一个应用程序,它是一个带有片段的导航抽屉应用程序。我成功地将我的应用程序连接到 Parse.com,它接收到的通知非常好。但是,我无法成功实现以下功能:

我有一个 Parse.com 对象,其中包含一个“名称”列。我可以从 Parse.com 加载该列中的数据,但我无法将该数据放入列表视图中。

这是我从 Parse.com 获取数据的 Alerts.java 页面:

package com.rayyan_nasr.apple.besgb.activity;

import com.parse.ParseClassName;
import com.parse.ParseObject;
import com.parse.ParseQuery;

/**
 * Created by Apple on 10/25/15.
*/
@ParseClassName("Recipe")
public class Alerts extends ParseObject {

public Alerts(){

}

public String getTitle() {
    return getString("name");
}

public void setTitle(String title) {
    put("name", title);
}

}

这是我的应用程序类,它注册了我的 Alerts.java 类 (MyApplication.java):

package com.rayyan_nasr.apple.besgb.activity;

import android.app.Application;
import android.content.res.Configuration;

import com.parse.Parse;
import com.parse.ParseClassName;
import com.parse.ParseInstallation;
import com.parse.ParseObject;

/**
* Created by Apple on 10/13/15.
*/
public class MyApplication extends Application {

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}
@Override
public void onCreate() {
    super.onCreate();
    ParseObject.registerSubclass(Alerts.class);
    Parse.initialize(this, "xxxxxx", "ccccc");
    ParseInstallation.getCurrentInstallation().saveInBackground();

}
@Override
public void onLowMemory() {
    super.onLowMemory();
}
@Override
public void onTerminate() {
    super.onTerminate();
}
}

这是我希望用我的 Parse.com 数据 Parse.java 填充的片段(我已经注释掉了给我一个错误的行):

package com.rayyan_nasr.apple.besgb.activity;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.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 android.widget.Toast;

import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.ParseQuery;
import com.rayyan_nasr.apple.besgb.R;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Apple on 10/27/15.
 */
public class Parse extends Fragment {

public ArrayList<String> foos = new ArrayList<String>();

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view =  inflater.inflate(R.layout.fragment_alerts, container, false);



    Toast.makeText(getActivity(), "Loading...", Toast.LENGTH_LONG).show();

    ParseQuery<Alerts> query = ParseQuery.getQuery(Alerts.class);
    query.findInBackground(new FindCallback<Alerts>() {
        @Override
        public void done(List<Alerts> results, ParseException e) {
            if (e == null) {
                for (int i = 0; i < results.size(); i++) {
                    String c = results.get(i).getString("name");
                    foos.add(c);
                }
            } else {
                Toast.makeText(getActivity(), "Error",
                        Toast.LENGTH_LONG).show();
            }
        }
    });

    ListView lv = (ListView) view.findViewById(R.id.listView);  //I'm getting an error in the below code from (this.. foos);
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, foos);
    lv.setAdapter(arrayAdapter);

    return view;

}

}

最后是我的布局文件,fragment_alerts.XML:

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

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/listView"
    android:layout_gravity="center_horizontal" />
</LinearLayout>

我已经尝试过 Parse 的 MealSpotting 教程,但似乎没有什么对我有用,我迫切需要一个解决方案,如果有人确实有答案,也许显示一些代码或至少指向一些可以帮助。提前谢谢..

干杯。

【问题讨论】:

    标签: android android-fragments parse-platform android-listfragment


    【解决方案1】:

    您不能在 Fragment 类中将上下文作为 this 传递。你应该通过getActivity() 代替this

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, foos);
    

    编辑: 您的 ParseObject 子类名称和 @ParseClassName 注释名称不匹配。

    @ParseClassName("Recipe")
    public class Alerts extends ParseObject { 
    

    findInBackground()回调的done()方法中检索数据时,如果使用解析子类对象,则通过解析子类方法名称检索记录。试试这样:

    ParseQuery<Alerts> query = ParseQuery.getQuery(Alerts.class);
    query.findInBackground(new FindCallback<Alerts>() {
        @Override
        public void done(List<Alerts> results, ParseException e) {
            if (e == null) {
                for (int i = 0; i < results.size(); i++) {
                    String c = results.get(i).getTitle();
                    foos.add(c);
                }
            } else {
                Toast.makeText(getActivity(), "Error",
                        Toast.LENGTH_LONG).show();
            }
        }
    });
    

    【讨论】:

    • 好吧,这消除了我的错误,但是当我运行应用程序时,没有显示列表。有什么建议吗?
    猜你喜欢
    • 2015-06-15
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多