从Parse.com使用片段获取数据 [英] Getting data from Parse.com using fragments

查看:130
本文介绍了从Parse.com使用片段获取数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从parse.com提取数据,并将结果在ListView。

在code本身没有错误,但是当我运行它,它崩溃,我不知道为什么。

LogCat中暗示bug是在doInBackground'方法,但是我一直没能找到一种方法来解决这个问题。

我觉得有一个简单的解决了这一点。

感谢您的帮助:)

片段类:

 公共类fragname扩展片段{//声明变量
ListView控件列表视图;
清单<&的parseObject GT; OB;
ProgressDialog mProgressDialog;
ArrayAdapter<串GT;适配器;@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
        捆绑savedInstanceState){
    // inflat并返回布局
    视图V = inflater.inflate(R.layout.listview_main,集装箱,FALSE);    新RemoteDataTask()执行();
    返回伏;
}私有类RemoteDataTask扩展的AsyncTask<太虚,太虚,太虚> {
    @覆盖
    在preExecute保护无效(){
        super.on preExecute();
        //创建一个progressdialog
        mProgressDialog =新ProgressDialog(getActivity());
        //设置progressdialog称号
        mProgressDialog.setTitle(加载方案,请等待:));
        //设置progressdialog消息
        mProgressDialog.setIndeterminate(假);
        //显示progressdialog
        mProgressDialog.show();    }    @覆盖
    保护无效doInBackground(虚空...... PARAMS){
        ParseQuery<&的parseObject GT;查询=新ParseQuery<&的parseObject GT;(
                国家);
        query.orderByDescending(国家);            尝试{
                OB = query.find();
            }赶上(com.parse.ParseException E){
Toast.makeText(getActivity(),错误+ e.getMessage(),Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }        返回null;
    }}保护无效onPostExecute(虚空结果){    列表视图=(ListView控件)getView()findViewById(R.id.listview)。
    适配器=新ArrayAdapter<串GT;(getActivity(),R.layout.listview_item);
    为(国家的parseObject:OB){
        adapter.add((字符串)country.get(国家));
    }
    listview.setAdapter(适配器);
    mProgressDialog.dismiss();
}

listview_main.xml

 <?XML版本=1.0编码=UTF-8&GT?;
<的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT>< ListView控件
    机器人:ID =@ + ID /列表视图
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT/>< / RelativeLayout的>

listview.xml

 <?XML版本=1.0编码=UTF-8&GT?;
< TextView中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:ID =@ + ID /文
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:填充=5SP
机器人:TEXTSIZE =25sp>< / TextView的>

LogCat中:

  12-03 16:13:30.380:D / dalvikvm(10654):GC_CONCURRENT释放7646K,6933K无/ 14663K 53%,暂停2MS + 6ms的
12-03 16:13:30.380:E / AndroidRuntime(10654):致命异常:AsyncTask的#1
12-03 16:13:30.380:E / AndroidRuntime(10654):了java.lang.RuntimeException:执行doInBackground发生错误()
12-03 16:13:30.380:E / AndroidRuntime(10654):在android.os.AsyncTask $ 3.done(AsyncTask.java:278)
12-03 16:13:30.380:E / AndroidRuntime(10654):在java.util.concurrent.FutureTask中$ Sync.innerSetException(FutureTask.java:273)
12-03 16:13:30.380:E / AndroidRuntime(10654):在java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-03 16:13:30.380:E / AndroidRuntime(10654):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:307)
12-03 16:13:30.380:E / AndroidRuntime(10654):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-03 16:13:30.380:E / AndroidRuntime(10654):在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:208)
12-03 16:13:30.380:E / AndroidRuntime(10654):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-03 16:13:30.380:E / AndroidRuntime(10654):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:569)
12-03 16:13:30.380:E / AndroidRuntime(10654):在java.lang.Thread.run(Thread.java:856)
12-03 16:13:30.380:E / AndroidRuntime(10654):了java.lang.RuntimeException:产生的原因必须使用解析库之前调用Parse.initialize(背景下,oauthKey,oauthSecret)。
12-03 16:13:30.380:E / AndroidRuntime(10654):在com.parse.ParseUser.checkApplicationContext(ParseUser.java:853)
12-03 16:13:30.380:E / AndroidRuntime(10654):在com.parse.ParseUser.getCurrentUser(ParseUser.java:726)
12-03 16:13:30.380:E / AndroidRuntime(10654):在com.parse.ParseUser.getCurrentSessionToken(ParseUser.java:756)
12-03 16:13:30.380:E / AndroidRuntime(10654):在com.parse.ParseQuery.findFromNetworkAsync(ParseQuery.java:511)
12-03 16:13:30.380:E / AndroidRuntime(10654):在com.parse.ParseQuery.access $ 4(ParseQuery.java:510)
12-03 16:13:30.380:E / AndroidRuntime(10654):在com.parse.ParseQuery $ 5.runOnNetworkAsync(ParseQuery.java:455)
12-03 16:13:30.380:E / AndroidRuntime(10654):在com.parse.ParseQuery.runCommandWithPolicyAsync(ParseQuery.java:397)
12-03 16:13:30.380:E / AndroidRuntime(10654):在com.parse.ParseQuery.findWithCachePolicyAsync(ParseQuery.java:466)
12-03 16:13:30.380:E / AndroidRuntime(10654):在com.parse.ParseQuery.findAsync(ParseQuery.java:449)
12-03 16:13:30.380:E / AndroidRuntime(10654):在com.parse.ParseQuery.find(ParseQuery.java:489)
12-03 16:13:30.380:E / AndroidRuntime(10654):在info.androidhive.slidingmenu.FindPeopleFragment $ RemoteDataTask.doInBackground(FindPeopleFragme nt.java:66)
12-03 16:13:30.380:E / AndroidRuntime(10654):在info.androidhive.slidingmenu.FindPeopleFragment$RemoteDataTask.doInBackground(FindPeopleFragment.java:1)
12-03 16:13:30.380:E / AndroidRuntime(10654):在android.os.AsyncTask $ 2.call(AsyncTask.java:264)
12-03 16:13:30.380:E / AndroidRuntime(10654):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)
12-03 16:13:30.380:E / AndroidRuntime(10654):... 5个
12-03 16:13:30.870:D / OpenGLRenderer(10654):刷新缓存(模式0)
12-03 16:13:30.880:D / OpenGLRenderer(10654):刷新缓存(模式0)
12-03 16:13:31.390:D / OpenGLRenderer(10654):冲洗缓存(模式1)
12-03 16:13:31.400:E /窗口管理器(10654):活动info.androidhive.slidingmenu.MainActivity渗漏,最初这里添加窗口com.android.internal.policy.impl.PhoneWindow$DecorView@41874b28
12-03 16:13:31.400:E /窗口管理器(10654):android.view.WindowLeaked:活动info.androidhive.slidingmenu.MainActivity渗漏窗口com.android.internal.policy.impl.PhoneWindow$DecorView@41874b28这是原本在这里添加
。12-03 16:13:31.400:E /窗口管理器(10654):在android.view.ViewRootImpl<&初始化GT;(ViewRootImpl.java:344)
12-03 16:13:31.400:E /窗口管理器(10654):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267)
12-03 16:13:31.400:E /窗口管理器(10654):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
12-03 16:13:31.400:E /窗口管理器(10654):在android.view.WindowManagerImpl $ CompatModeWrapper.addView(WindowManagerImpl.java:140)
12-03 16:13:31.400:E /窗口管理器(10654):在android.view.Window $ LocalWindowManager.addView(Window.java:537)
12-03 16:13:31.400:E /窗口管理器(10654):在android.app.Dialog.show(Dialog.java:278)
12-03 16:13:31.400:E /窗口管理器(10654):在info.androidhive.slidingmenu.FindPeopleFragment$RemoteDataTask.on$p$pExecute(FindPeopleFragment.java:53)
12-03 16:13:31.400:E /窗口管理器(10654):在android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
12-03 16:13:31.400:E /窗口管理器(10654):在android.os.AsyncTask.execute(AsyncTask.java:511)
12-03 16:13:31.400:E /窗口管理器(10654):在info.androidhive.slidingmenu.FindPeopleFragment.onCreateView(FindPeopleFragment.java:35)
12-03 16:13:31.400:E /窗口管理器(10654):在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828)
12-03 16:13:31.400:E /窗口管理器(10654):在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
12-03 16:13:31.400:E /窗口管理器(10654):在android.app.BackStackRecord.run(BackStackRecord.java:622)
 12-03 16:13:31.400:E /窗口管理器(10654):在android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)
12-03 16:13:31.400:E /窗口管理器(10654):在android.app.FragmentManagerImpl $ 1.run(FragmentManager.java:426)
12-03 16:13:31.400:E /窗口管理器(10654):在android.os.Handler.handleCallback(Handler.java:605)
12-03 16:13:31.400:E /窗口管理器(10654):在android.os.Handler.dispatchMessage(Handler.java:92)
12-03 16:13:31.400:E /窗口管理器(10654):在android.os.Looper.loop(Looper.java:137)
12-03 16:13:31.400:E /窗口管理器(10654):在android.app.ActivityThread.main(ActivityThread.java:4446)
12-03 16:13:31.400:E /窗口管理器(10654):在java.lang.reflect.Method.invokeNative(本机方法)
12-03 16:13:31.400:E /窗口管理器(10654):在java.lang.reflect.Method.invoke(Method.java:511)
12-03 16:13:31.400:E /窗口管理器(10654):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
12-03 16:13:31.400:E /窗口管理器(10654):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-03 16:13:31.400:E /窗口管理器(10654):在dalvik.system.NativeStart.main(本机方法)
12-03 16:13:32.360:I /流程(10654):发送信号。 PID:10654 SIG:9

修改

解析应用类

 公共类ParseApplication扩展应用{@覆盖
公共无效的onCreate(){
    super.onCreate();    //此处添加您的初始code
    Parse.initialize(这一点,**解析**的关键,**解析**键);    ParseUser.enableAutomaticUser();
    ParseACL defaultACL =新ParseACL();    //如果你想所有对象是默认私人,删除此
    //线。
    defaultACL.setPublicReadAccess(真);    ParseACL.setDefaultACL(defaultACL,真);
}}


解决方案

您需要调用Parse.initialize(背景下,oauthKey,oauthSecret)在应用程序中所做的任何查询解析之前。这告诉哪个应用是你的服务。您可以找到您解析仪表板中的钥匙。

本博客文章可能会有所帮助:<一href=\"http://www.michaelevans.org/blog/2013/08/14/tutorial-building-an-android-to-do-list-app-using-parse/\" rel=\"nofollow\">http://www.michaelevans.org/blog/2013/08/14/tutorial-building-an-android-to-do-list-app-using-parse/

I am trying to pull data from parse.com and place the resulting in a ListView.

The code itself has no errors however when i run it, it crashes and i have no idea why.

LogCat suggests the bug is in the 'doInBackground' method however i have not been able to find a way to solve this.

i feel there is a simple solution to this.

thanks for any help :)

Fragment class:

public class fragname extends Fragment { 

// Declare Variables
ListView listview;
List<ParseObject> ob;
ProgressDialog mProgressDialog;
ArrayAdapter<String> adapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) {
    // inflat and return the layout
    View v = inflater.inflate(R.layout.listview_main, container, false);

    new RemoteDataTask().execute();


    return v;
}

private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Create a progressdialog
        mProgressDialog = new ProgressDialog(getActivity());
        // Set progressdialog title
        mProgressDialog.setTitle("Loading Programme, Please Wait :)");
        // Set progressdialog message
        mProgressDialog.setIndeterminate(false);
        // Show progressdialog
        mProgressDialog.show();

    }

    @Override
    protected Void doInBackground(Void... params) {
        ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
                "Country");
        query.orderByDescending("country");

            try {
                ob = query.find();
            } catch (com.parse.ParseException e) {
Toast.makeText(getActivity(), "Error, " +     e.getMessage(), Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }

        return null;            
    }}

protected void onPostExecute(Void result){

    listview = (ListView) getView().findViewById(R.id.listview);        
    adapter = new ArrayAdapter<String>(getActivity(), R.layout.listview_item);      
    for (ParseObject country : ob) {
        adapter.add((String) country.get("country"));
    }       
    listview.setAdapter(adapter);       
    mProgressDialog.dismiss();  
}

listview_main.xml

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

<ListView
    android:id="@+id/listview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

</RelativeLayout>

listview.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5sp"
android:textSize="25sp" >

</TextView>

LogCat:

12-03 16:13:30.380: D/dalvikvm(10654): GC_CONCURRENT freed 7646K, 53% free 6933K/14663K,           paused 2ms+6ms
12-03 16:13:30.380: E/AndroidRuntime(10654): FATAL EXCEPTION: AsyncTask #1
12-03 16:13:30.380: E/AndroidRuntime(10654): java.lang.RuntimeException: An error occured                                                                    while executing doInBackground()
12-03 16:13:30.380: E/AndroidRuntime(10654):    at     android.os.AsyncTask$3.done(AsyncTask.java:278)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at    java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at    java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at    java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at java.lang.Thread.run(Thread.java:856)
12-03 16:13:30.380: E/AndroidRuntime(10654): Caused by: java.lang.RuntimeException: You must call Parse.initialize(context, oauthKey, oauthSecret) before using the Parse library.
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseUser.checkApplicationContext(ParseUser.java:853)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseUser.getCurrentUser(ParseUser.java:726)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseUser.getCurrentSessionToken(ParseUser.java:756)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery.findFromNetworkAsync(ParseQuery.java:511)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery.access$4(ParseQuery.java:510)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery$5.runOnNetworkAsync(ParseQuery.java:455)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery.runCommandWithPolicyAsync(ParseQuery.java:397)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery.findWithCachePolicyAsync(ParseQuery.java:466)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery.findAsync(ParseQuery.java:449)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery.find(ParseQuery.java:489)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at info.androidhive.slidingmenu.FindPeopleFragment$RemoteDataTask.doInBackground(FindPeopleFragme  nt.java:66)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at info.androidhive.slidingmenu.FindPeopleFragment$RemoteDataTask.doInBackground(FindPeopleFragment.java:1)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-03 16:13:30.380: E/AndroidRuntime(10654):    ... 5 more
12-03 16:13:30.870: D/OpenGLRenderer(10654): Flushing caches (mode 0)
12-03 16:13:30.880: D/OpenGLRenderer(10654): Flushing caches (mode 0)
12-03 16:13:31.390: D/OpenGLRenderer(10654): Flushing caches (mode 1)
12-03 16:13:31.400: E/WindowManager(10654): Activity  info.androidhive.slidingmenu.MainActivity has leaked window  com.android.internal.policy.impl.PhoneWindow$DecorView@41874b28 that was originally added here
12-03 16:13:31.400: E/WindowManager(10654): android.view.WindowLeaked: Activity    info.androidhive.slidingmenu.MainActivity has leaked window   com.android.internal.policy.impl.PhoneWindow$DecorView@41874b28 that was originally added here
12-03 16:13:31.400: E/WindowManager(10654):     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:344)
12-03 16:13:31.400: E/WindowManager(10654):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267)
12-03 16:13:31.400: E/WindowManager(10654):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
12-03 16:13:31.400: E/WindowManager(10654):     at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
12-03 16:13:31.400: E/WindowManager(10654):     at android.view.Window$LocalWindowManager.addView(Window.java:537)
12-03 16:13:31.400: E/WindowManager(10654):     at android.app.Dialog.show(Dialog.java:278)
12-03 16:13:31.400: E/WindowManager(10654):     at info.androidhive.slidingmenu.FindPeopleFragment$RemoteDataTask.onPreExecute(FindPeopleFragment.java:53)
12-03 16:13:31.400: E/WindowManager(10654):     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
12-03 16:13:31.400: E/WindowManager(10654):     at android.os.AsyncTask.execute(AsyncTask.java:511)
12-03 16:13:31.400: E/WindowManager(10654):     at info.androidhive.slidingmenu.FindPeopleFragment.onCreateView(FindPeopleFragment.java:35)
12-03 16:13:31.400: E/WindowManager(10654):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828)
12-03 16:13:31.400: E/WindowManager(10654):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
12-03 16:13:31.400: E/WindowManager(10654):     at android.app.BackStackRecord.run(BackStackRecord.java:622)
 12-03 16:13:31.400: E/WindowManager(10654):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)
12-03 16:13:31.400: E/WindowManager(10654):     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)
12-03 16:13:31.400: E/WindowManager(10654):     at android.os.Handler.handleCallback(Handler.java:605)
12-03 16:13:31.400: E/WindowManager(10654):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-03 16:13:31.400: E/WindowManager(10654):     at android.os.Looper.loop(Looper.java:137)
12-03 16:13:31.400: E/WindowManager(10654):     at android.app.ActivityThread.main(ActivityThread.java:4446)
12-03 16:13:31.400: E/WindowManager(10654):     at java.lang.reflect.Method.invokeNative(Native Method)
12-03 16:13:31.400: E/WindowManager(10654):     at java.lang.reflect.Method.invoke(Method.java:511)
12-03 16:13:31.400: E/WindowManager(10654):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-03 16:13:31.400: E/WindowManager(10654):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-03 16:13:31.400: E/WindowManager(10654):     at dalvik.system.NativeStart.main(Native Method)
12-03 16:13:32.360: I/Process(10654): Sending signal. PID: 10654 SIG: 9

Edit

Parse Application class

public class ParseApplication extends Application {

@Override
public void onCreate() {
    super.onCreate();

    // Add your initialization code here
    Parse.initialize(this, "**parse key**","**parse key**");

    ParseUser.enableAutomaticUser();
    ParseACL defaultACL = new ParseACL();

    // If you would like all objects to be private by default, remove this
    // line.
    defaultACL.setPublicReadAccess(true);

    ParseACL.setDefaultACL(defaultACL, true);
}

}

解决方案

You need to call Parse.initialize(context, oauthKey, oauthSecret) in your application before you make any queries to Parse. This tells the service which app is yours. You can find the keys on your Parse Dashboard.

This blog post might be helpful: http://www.michaelevans.org/blog/2013/08/14/tutorial-building-an-android-to-do-list-app-using-parse/

这篇关于从Parse.com使用片段获取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆