2016-04-15 23 views
0

私はEC2インスタンスに格納されたテーブルに接続するためにAndroidプロジェクトで作業していました。私は別途接続コードを作ってテストしました。それは出力を表示しているが、問題は、Androidプロジェクトにコードを統合しようとすると、Hiveライブラリのエラー "ClassDefNotFound"エラーがスローされるということです。AWS接続時にAndroidでClassDefNotFoundエラーが発生しました

MainActivity.java

package com.example.blockbuster; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends ActionBarActivity { 

    Button searchButton; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     searchButton = (Button)findViewById(R.id.search_button); 
    } 

    public void clickSearch(View view){ 
     Intent intent = new Intent(this,PopulateOnUi.class); 
     startActivity(intent); 
    } 

} 

PopulateOnUi.java

package com.example.blockbuster; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.ArrayList; 
import java.util.List; 

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

import java.sql.SQLException; 
import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.Statement; 
import java.sql.DriverManager; 

public class PopulateOnUi extends ActionBarActivity { 

    ListView listview; 
    TextView tv1; 
    String data = null; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_populate_on_ui); 
     String[] values = new String[]{"data1","data2","data3","data4", "data5"}; 
     String data = null; 
     ////////////////////////////////////////////////////////// 
     String driverName = "com.amazon.hive.jdbc3.HS2Driver"; 
     try { 
      Class.forName(driverName); 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      //  System.exit(1); 
     } 
     try { 
      Connection con = DriverManager.getConnection("jdbc:hive2://xx.xxx.xxx.xx:10000/default", "", ""); 
      Statement stmt = con.createStatement(); 
      String tableName = "msd"; 
      // show tables 
      String sql = "show tables '" + tableName + "'"; 
      //System.out.println("Running: " + sql); 
      ResultSet res = stmt.executeQuery(sql); 
      if (res.next()) { 
       // System.out.println(res.getString(1)); 
       data = res.getString(1); 
      } 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     ////////////////////////////////////////////////////////////////// 
     tv1 = (TextView)findViewById(R.id.textView1); 
     tv1.setText(data); 
     //listview = (ListView)findViewById(R.id.listView1); 

     // ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
     //    android.R.layout.simple_list_item_1,android.R.id.text1,data); 
     //  listview.setAdapter(adapter); 
    } 
} 

私はすべてのAndroidプロジェクトのビルド・パスにconnectionHive一部で必要とされた瓶とも権限が追加されました」使用許諾android:name = "android.permission.INTERNET" "Logs file。誰もがエラーを見つけることができますか?

+1

あなたはあなたのアプリケーションログから実際の例外を投稿する必要があります。それはあなたが見つけることができないクラスを正確に教えてくれるでしょう。 –

+0

ログファイルを追加しました。 –

答えて

1

エラーメッセージを読むと、具体的にはクラスjavax.security.sasl.Saslが見つからないことがわかります。このクラスはAndroidにはパッケージされておらず、アプリケーションに組み込む必要があります。 Thisが開始する可能性が高いようです。

また、このような、ここで求められている他の類似の質問に、読んでみてください:Is there SASL implementation that works on Android?

+0

あなたはパスを構築するためにどの.jarファイルを追加するかをelaobrateすることができます。物事を働かせるには?ビルドパスにjarファイルを追加するだけで済むのでしょうか、それともコードの一部が入りますか? –

+0

ビルドパスにjavax-sasl.jarを追加しました。 –

関連する問題