我一直在研究一个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?

10-07 19:30
查看更多