我一直在研究一个Android项目,以连接到存储在我的EC2实例中的表。我已经分别制作了连接代码并对其进行了测试。它显示了所需的输出,但问题是当我尝试将代码集成到Android Project时,它会抛出某些Hive库的错误“ 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部分所需的所有jar,还添加了权限“ uses-permission android:name =“ android.permission.INTERNET”” Logs file。谁能发现错误?
最佳答案
如果您阅读错误消息,它会特别指出找不到类javax.security.sasl.Sasl
。此类未与Android打包在一起,您需要将其包含在应用程序中。 This看起来可能是一个起点。
您也可以尝试阅读此处提出的其他类似问题,例如:Is there SASL implementation that works on Android?