2013-12-03 3 views
2

Я пытаюсь извлечь данные с сайта parse.com и разместить в результате ListView.Получение данных из Parse.com с использованием фрагментов

У самого кода нет ошибок, однако, когда я запускаю его, он падает, и я понятия не имею, почему.

LogCat предлагает ошибку в методе doInBackground, однако я не смог найти способ решить эту проблему.

Я чувствую, что есть простое решение.

спасибо за любую помощь :)

Фрагмент класса:

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 [email protected] 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 [email protected] 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

Анализировать Применение

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); 
} 

} 
+0

Пожалуйста, не используйте тег '' parsing' для parse.com', который является совершенно другой темой. – rici

ответ

1

Вы должны вызвать Parse.initialize (контекст, oauthKey, oauthSecret) в своем приложении, прежде чем делать какие-либо запросы к Разбираем. Это сообщает службе, какое приложение принадлежит вам. Вы можете найти ключи на своей панели анализа.

Этот блог может быть полезно: http://www.michaelevans.org/blog/2013/08/14/tutorial-building-an-android-to-do-list-app-using-parse/

+0

У меня есть класс применения синтаксического анализа с соответствующими ключами (удалено в редактировании), разве это не способ сделать это? - см. править. Спасибо за быстрый ответ –

+1

Является ли этот класс указанным в вашем AndroidManifest.xml? –

+0

Решил это, добавив: «Parse.initialize (это,« ** синтаксический ключ ** »,« ** синтаксический ключ ** »); к методу onCreate в моем классе фрагмента. Сообщение в блоге помогло спасибо –

Смежные вопросы