2011-11-22 1 views
1

문제가 있습니다. 다음 프로그램을 실행할 때 NoClassDefaunderError가 발견되었지만이 클래스가이 프로그램에 존재합니다. 나는 DVM에 의해 통해 왜이 오류를 이해하지 않았다클래스가 프로그램에 존재하는 동안 NoClassDefoundError

프로그램은 다음과 같습니다

package com.codecarpet.fbconnect.sample; 

import java.util.Collections; 
import java.util.Map; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

import com.codecarpet.fbconnect.FBDialog; 
import com.codecarpet.fbconnect.FBDialog.FBDialogDelegate; 
import com.codecarpet.fbconnect.FBFeedActivity; 
import com.codecarpet.fbconnect.FBLoginButton; 
import com.codecarpet.fbconnect.FBLoginButton.FBLoginButtonStyle; 
import com.codecarpet.fbconnect.FBPermissionActivity; 
import com.codecarpet.fbconnect.FBRequest; 
import com.codecarpet.fbconnect.FBRequest.FBRequestDelegate; 
import com.codecarpet.fbconnect.FBSession; 
import com.codecarpet.fbconnect.FBSession.FBSessionDelegate; 


public class MainActivity extends Activity { 

    // ///////////////////////////////////////////////////////////////////////////////////////////////// 
    // This application will not work until you enter your Facebook application's API key here: 

    private static final String kApiKey = "<YOUR API KEY>"; 

    // Enter either your API secret or a callback URL (as described in documentation): 
    private static final String kApiSecret = "<YOUR SECRET KEY>"; 
    private static final String kGetSessionProxy = null; // "<YOUR SESSION CALLBACK)>"; 
    private static final int PERMISSIONREQUESTCODE = 1; 
    private static final int MESSAGEPUBLISHED = 2; 
    // ///////////////////////////////////////////////////////////////////////////////////////////////// 

    private FBSession _session; 
    private FBLoginButton _loginButton; 
    private TextView _label; 
    private Button _permissionButton; 
    private Button _feedButton; 
    private Handler mHandler; 

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

     mHandler = new Handler(); 

     if (kGetSessionProxy != null) { 
      _session = FBSession.getSessionForApplication_getSessionProxy(kApiKey, kGetSessionProxy, new FBSessionDelegateImpl()); 
     } else { 
      _session = FBSession.getSessionForApplication_secret(kApiKey, kApiSecret, new FBSessionDelegateImpl()); 
     } 

     setContentView(R.layout.main); 

     _label = (TextView) findViewById(R.id.label); 
     _permissionButton = (Button) findViewById(R.id.permissionButton); 
     _permissionButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       askPermission(); 
      } 
     }); 

     _feedButton = (Button) findViewById(R.id.feedButton); 
     _feedButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       publishFeed(); 
      } 
     }); 

     _loginButton = (FBLoginButton) findViewById(R.id.login); 
     _loginButton.setStyle(FBLoginButtonStyle.FBLoginButtonStyleWide); 
     _loginButton.setSession(_session); 

     _session.resume(this); 

    } 

    // ///////////////////////////////////////////////////////////////////////////////////////////////// 

    private void askPermission() { 
     Intent intent = new Intent(this, FBPermissionActivity.class); 
     intent.putExtra("permissions", new String[]{"publish_stream"}); 
     this.startActivityForResult(intent, PERMISSIONREQUESTCODE); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 

     switch (requestCode){ 
     case PERMISSIONREQUESTCODE: 
      if (resultCode == 1) 
       _permissionButton.setVisibility(View.INVISIBLE); 
     default: 
      return; 
     } 

    } 

    private void publishFeed() { 
     Intent intent = new Intent(this, FBFeedActivity.class); 
     intent.putExtra("userMessagePrompt", "Example prompt"); 
     intent.putExtra("attachment", "{\"name\":\"Facebook Connect for Android\",\"href\":\"http://code.google.com/p/fbconnect-android/\",\"caption\":\"Caption\",\"description\":\"Description\",\"media\":[{\"type\":\"image\",\"src\":\"http://img40.yfrog.com/img40/5914/iphoneconnectbtn.jpg\",\"href\":\"http://developers.facebook.com/connect.php?tab=iphone/\"}],\"properties\":{\"another link\":{\"text\":\"Facebook home page\",\"href\":\"http://www.facebook.com\"}}}"); 
     this.startActivityForResult(intent, MESSAGEPUBLISHED); 
    } 

    // ///////////////////////////////////////////////////////////////////////////////////////////////// 

    private class FBDialogDelegateImpl extends FBDialogDelegate { 

     @Override 
     public void didFailWithError(FBDialog dialog, Throwable error) { 
      _label.setText(error.toString()); 
     } 

    } 

    private void checkPermission() { 
     String fql = "select publish_stream from permissions where uid == " + String.valueOf(_session.getUid()); 
     Map<String, String> params = Collections.singletonMap("query", fql); 
     FBRequest.requestWithDelegate(new FBHasPermissionRD()).call("facebook.fql.query", params); 
    }  

    private class FBSessionDelegateImpl extends FBSessionDelegate { 

     @Override 
     public void session_didLogin(FBSession session, Long uid) { 
      // we check if the user already has the permissions before displaying permission button 
      checkPermission(); 

      mHandler.post(new Runnable() { 
       public void run() { 
        _feedButton.setVisibility(View.VISIBLE); 
       } 
      }); 

      String fql = "select uid,name from user where uid == " + session.getUid(); 

      Map<String, String> params = Collections.singletonMap("query", fql); 
      FBRequest.requestWithDelegate(new FBRequestDelegateImpl()).call("facebook.fql.query", params); 
     } 



     @Override 
     public void sessionDidLogout(FBSession session) { 
      mHandler.post(new Runnable() { 
       public void run() { 
        _label.setText(""); 
        _permissionButton.setVisibility(View.INVISIBLE); 
        _feedButton.setVisibility(View.INVISIBLE); 
       } 
      }); 
     } 

    } 

    private class FBRequestDelegateImpl extends FBRequestDelegate { 

     @Override 
     public void request_didLoad(FBRequest request, Object result) { 

      String name = null; 

      if (result instanceof JSONArray) { 
       JSONArray jsonArray = (JSONArray) result; 
       try { 
        JSONObject jo = jsonArray.getJSONObject(0); 
        name = jo.getString("name"); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
      _label.setText("Logged in as " + name); 
     } 

     @Override 
     public void request_didFailWithError(FBRequest request, Throwable error) { 
      _label.setText(error.toString()); 
     } 
    } 

    private class FBHasPermissionRD extends FBRequestDelegate { 

     @Override 
     protected void request_didFailWithError(FBRequest request, 
       Throwable error) { 
      super.request_didFailWithError(request, error); 
     } 

     @Override 
     public void request_didLoad(FBRequest request, Object result) { 
      int hasPermission = 0; 

      if (result instanceof JSONArray) { 
       JSONArray jsonArray = (JSONArray) result; 
       try { 
        JSONObject jo = jsonArray.getJSONObject(0); 
        hasPermission = jo.getInt("publish_stream"); 
        if (hasPermission == 0) 
        { 
         mHandler.post(new Runnable() { 
          public void run() { 
           _permissionButton.setVisibility(View.VISIBLE); 
          } 
         }); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

그리고 오류는 다음과 같습니다 사전에

11-22 11:33:02.510: ERROR/AndroidRuntime(3213): java.lang.NoClassDefFoundError: com.codecarpet.fbconnect.sample.MainActivity$FBSessionDelegateImpl 
11-22 11:33:02.510: ERROR/AndroidRuntime(3213):  at com.codecarpet.fbconnect.sample.MainActivity.onCreate(MainActivity.java:77) 

고맙습니다 ...

+0

모든 jar 파일에서'FBSessionDelegateImpl'에 액세스하고 있습니까? 이전 버전의 jar를 사용 중일 수 있습니다. 그냥 추측 해. 이것은 문제 일 수 있습니다. 클래스 경로도 확인하십시오 –

답변

1

프로젝트의 절대 경로를 지정하십시오. 이것을 할 수 없다면, 현재 프로젝트에 페이스 북 API의 모든 파일을 추가하십시오. 그 후 깨끗하게하고, 그것을 달리게해라. ... !!!

0

프로젝트가 Jar 파일을 사용하고 경로가 올바르게 추가되지 않은 것으로 보입니다.

+3

매니페스트에 없으면 전혀 실행되지 않습니다. –

+0

예이 활동은 매니페스트 파일에 언급되어 있습니다. –

관련 문제